繁体   English   中英

Doctrine 查询构建器 ~ 日期时间

[英]Doctrine query builder ~ datetime

我正在尝试在 symfony2/doctrine 2 中创建一个简单的聊天框。

为了测试,我每 5 秒检查一次新消息,因此在我的查询中,我尝试通过获取日期时间大于当前负 5 秒的所有消息来获取所有消息。

我尝试按以下方式执行此操作,但它返回数据库中的所有消息,而不是过去 5 秒内发布的消息

$em = $this->getDoctrine()->getManager();

$qb = $em->createQueryBuilder();
$qb->select('m')
                 ->from('ChatboxBundle:ChatMessage', 'm')
                 ->where(':new > :last')
                 ->setParameter('new', 'm.postdate' )
                 ->setParameter('last', new \DateTime('-5 second'), \Doctrine\DBAL\Types\Type::DATETIME);
$updatedata = $qb->getQuery()->getResult();

关于我做错了什么的任何想法?

m.postdate是字段名称,因此不应作为参数传入。 试试这个

$qb = $em->createQueryBuilder();
$qb->select('m')
                 ->from('ChatboxBundle:ChatMessage', 'm')
                 ->where('m.postdate > :last')
                 ->setParameter('last', new \DateTime('-5 second'), \Doctrine\DBAL\Types\Type::DATETIME);
$updatedata = $qb->getQuery()->getResult();

请注意,您不需要使用 \\Doctrine\\DBAL\\Types\\Type::DATETIME

文档说:调用 setParameter() 会自动推断您将哪种类型设置为值。 这适用于整数、字符串/整数数组、 DateTime实例和托管实体。 如果要显式设置类型,可以显式调用 setParameter() 的第三个参数。 它接受 PDO 类型或 DBAL 类型名称进行转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM