datetime comparaison doctrine querybuilder

时间:2014-10-03 12:57:56

标签: symfony datetime doctrine query-builder

我想删除数据库中达到结束日期的所有条目

 $em = $this->getEntityManager();
            $qb = $em->createQueryBuilder('f');
            $qb->delete('AcmeMyBundle:FlowerEntity');
            $qb->where($qb->expr()->lte('f.endingDate', ':now'));
            $qb->setParameter('now', new \DateTime('now'));

            return $qb->getQuery()->getResult();

我收到错误

[Syntax Error] line 0, col 57: Error: Expected end of string, got 'f' 

我尝试了很多方法,但遗憾的是没有太大的成功..任何线索?谢谢!


基于NHG答案的解决方案

    $em = $this->getEntityManager();
    $qb = $em->createQueryBuilder();
    $qb->delete('AcmeMyBundle:FlowerEntity', 'f');
    $qb->where($qb->expr()->lte('f.endingDate', ':now'));
    $qb->setParameter('now', new \DateTime('now'));

    return $qb->getQuery()->getResult();

2 个答案:

答案 0 :(得分:2)

我不知道您对endingDate字段的定义是什么,但您可以尝试将DateTime对象转换为字符串:

$date = new \DateTime('now');
// query
$qb->setParameter('now', $date->format('Y-m-d h:i:s'));

修改

问题在于f中的$em->createQueryBuilder('f')参数。尝试:

$em = $this->getEntityManager();
            $qb = $em->createQueryBuilder();
            $qb->delete('AcmeMyBundle:Flower', 'f');
// further code

Doc.另外,我使用Flower代替FlowerEntity

答案 1 :(得分:0)

您可以按日期时间进行比较:

$qb->where('f.endingDate <= :minDatetime');
$qb->setParameter('minDatetime', $minDatetime);