Doctrine查询构建器~datetime

Nic*_*ick 13 php mysql symfony doctrine-orm

我正在尝试在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();
Run Code Online (Sandbox Code Playgroud)

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

亲切的问候

Fuz*_*ree 16

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();
Run Code Online (Sandbox Code Playgroud)

  • 是的,自从这个答案以来已经很久了,在 Symfony 4.3 中我不得不使用 `Types::DATETIME_MUTABLE` 因为 `DATETIME` 已经被弃用了 (3认同)