【发布时间】:2021-12-17 14:10:28
【问题描述】:
当我尝试以下代码时:
return $this->createQueryBuilder('e')
->select('e.user_id', 'e.year', 'e.week_number', 'e.approved_by')
->where('e.user_id = :userID')
->andWhere('(e.year * 100 + e.week_number) BETWEEN :startDate and :endDate')
->setParameter('userID', $userID)
->setParameter('startDate', ($startYear * 100 + $startWeek))
->setParameter('endDate', ($endYear * 100 + $endWeek))
->getQuery()
->getResult()
;
我收到错误[Syntax Error] line 0, col 149: Error: Expected =, <, <=, <>, >, >=, !=, got 'BETWEEN'。
如果我打印我的查询,它看起来像这样:
dql: "SELECT e.user_id, e.year, e.week_number, e.approved_by FROM App\Entity\... e WHERE e.user_id = :userID AND ((e.year * 100 + e.week_number) BETWEEN :startDate and :endDate)"
如果我在 SSMS 中使用此查询并将变量替换为实际数据。一切都很好。
我的变量具有以下值:
$startYear = 2021;
$startWeek = 52;
$endYear = 2022;
$endWeek = 05;
// :startDate = 202152;
// :endDate = 202205;
计算可能会破坏查询生成器。主要是因为我做了类似的查询:->andWhere('e.week_number between :startWeek and :endWeek') 确实有效。我不知道如何解决它们或为什么会发生这种情况。
我正在使用 Symfony 4.4。用于我的数据库的 SQL Server。
【问题讨论】:
-
您是否有机会使用存储过程而不是此查询生成器?会给你更好的层分离,并会消除这个错误。
-
@SeanLange 我可以在 Symfony 中使用原生 SQL。但是这样我就可以将整个查询放入其中。我感觉查询生成器有问题,所以我想知道其他人是否知道原因或/以及如何在查询生成器中解决此问题。
-
您可以尝试使用
->andWhere('(e.year * 100 + e.week_number) >= :startDate')和->andWhere('(e.year * 100 + e.week_number) <= :endDate')更改BETWEEN条件 -
@Zhorov 你发表评论作为答案吗?所以我可以接受它。
标签: php sql sql-server symfony symfony4