【发布时间】:2021-07-25 06:25:34
【问题描述】:
我想将日期时间值(来自数据库)与当前时间进行比较,并检查当前时间是在数据库中的值之前还是之后。这是在 Symfony 项目中完成的。我尝试关注instructions on the Symfony website。
所以我在 Repository Class 中编写了以下 Doctrine 查询,它检查用户锁定时间并检查它是否仍在未来:
$user_id = 1; // Just giving $user_id a value for this example
$qb = $this->createQueryBuilder('user')
->andWhere('user.lockout_time > :time')
->setParameter('time', date("Y-m-d H:i:s"))
->andWhere('user.user_id = :user_id')
->setParameter('user_id', $user_id);
$query = $qb->getQuery();
echo $query->getSQL();
die;
运行时,两个 Where 子句的比较值都包含“?”(例如WHERE user.lockout_time > ?)。显然我希望在查询中使用实际值。
最初我认为 date() 函数可能是问题所在,但即使我只使用 :user_id 也会出现上述错误。
如果我写 ->andWhere('user.user_id = 1') 我会得到想要的结果。
如果我将 :time 替换为 'Ymd H:i:s' 格式的某个日期,我会收到消息“错误:预期结束string..."(其中 ... 是 Hour 的值)。
所以我的两个 setParameter() 行都没有传递其中设置的值。我忽略了什么?
编辑: 建议的问题here 不是重复的。这只是帮助我查看发送的查询。这对准备这个问题很有帮助。
【问题讨论】:
-
另外,您可能应该使用
->setParameter('time', new \DateTime())对象学说来来回转换此字段。setParameter方法会将其转换为已配置数据库的正确值。 -
@ArleighHix 谢谢。我在发这个之前就找到了。它帮助我得出结论,只有“?”是命名占位符的输出。也感谢您提供新 \DateTime() 的提示。这是我尝试过的事情之一,但无济于事。我在我的代码中把它改回来了。
标签: symfony doctrine query-builder