【问题标题】:datetime comparaison doctrine querybuilder日期时间比较学说查询构建器
【发布时间】:2014-10-03 12:57:55
【问题描述】:

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

 $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();

【问题讨论】:

    标签: symfony datetime doctrine query-builder


    【解决方案1】:

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

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

    编辑:

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

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

    Doc. 另外我使用了Flower 而不是FlowerEntity。

    【讨论】:

    • endingDate 也是一个 dateTime ,我怎样才能把它改成字符串?我已经在查询中尝试了 f.endingDate->format( .. ),但它抛出预期的参数 1 是给定的对象布尔值(它看起来很脏,我犹豫要不要尝试这个大声笑)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2012-02-07
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多