【问题标题】:Symfony findBy DATEDIFFSymfony find来自 DATEDIFF
【发布时间】:2015-03-12 14:21:48
【问题描述】:

我正在尝试获取所有日期大于 4 周的条目

$oRepoArticleImage->findBy(array('deletedAt' => 'DATEDIFF(now(), deletedAt) > 4'));

我收到以下错误。我做错了什么?

PHP 致命错误:在非对象上调用成员函数 format() 在 .../vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php 第 53 行

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    Find by 总是需要一个键值数组。在您的情况下,您尝试使用字符串作为 DateTime 对象。这不起作用。要获得预期的结果,您必须使用这样的查询构建器:

         $now = new \DateTime();
        // four weeks in days (28)
        $daysAgo = $now->sub(new \DateInterval('P28D'));
        $images = $oRepoArticleImage->createQueryBuilder('i')
            ->where('i.deletedAt < :date')
            ->setParameter('date', $daysAgo)
            ->getQuery()
            ->getResult();
    

    【讨论】:

    • 应该这样做!谢谢!
    • P4W 也可以工作,即使它被转换为天,它也可以让代码“为自己说话”。 new DateTime() 也可能需要为 new \DateTime()
    • php 文档说 W(周)会转换为天,因此我更喜欢天而不是周。
    • 当然——我对此的评论只是一种意见。虽然...您也可以使用 new \DateTime('4 weeks ago') 或 new \DateTime('28 days ago') 的相对时间,并完全避免使用 DateTime::sub()。
    猜你喜欢
    • 2022-10-17
    • 1970-01-01
    • 2020-04-21
    • 2021-11-29
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多