【发布时间】:2012-12-04 01:18:47
【问题描述】:
如何在学说查询构建器中使用表达式mysql NOW()?
【问题讨论】:
标签: mysql doctrine doctrine-orm doctrine-query
如何在学说查询构建器中使用表达式mysql NOW()?
【问题讨论】:
标签: mysql doctrine doctrine-orm doctrine-query
在 Doctrine2 中,您必须使用以下之一而不是 NOW()。
这个:
CURRENT_TIMESTAMP()
或者:
...
createQuery(...'WHERE x.date = :now')
->setParameter('now', new \DateTime('now'))
...
如果您只需要时间或日期,请使用以下之一:
CURRENT_TIME() 和 CURRENT_DATE()
【讨论】:
'now' 是DateTime 的默认参数,所以new \DateTime() 就足够了。
使用查询生成器,它看起来像这样:
$qb
->select('B')
->from('RandomBundle:Banana', 'B')
->where(
$qb->expr()->gt('B.expiresAt', ':now')
)
->setParameter('now', '\'CURRENT_TIMESTAMP()\'');
注意:参数集上的额外引号需要才能使CURRENT_TIMESTAMP() 函数正常工作。
或者干脆
$qb
->select('B')
->from('RandomBundle:Banana', 'B')
->where(
$qb->expr()->gt('B.expiresAt', 'CURRENT_TIMESTAMP()')
);
【讨论】:
where 调用中使用较短的 B.expiresAt > CURRENT_TIMESTAMP() 比较,而不是使用查询构建器表达式