2015-03-12 3 views
1

Я пытаюсь получить все записи, которые имеют дату больше, чем 4 недели, как этотSymfony findBy DATEDIFF

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

Я получаю следующее сообщение об ошибке. Что я делаю неправильно?

PHP Fatal error: Call to a member function format() on a non-object in .../vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php on line 53

ответ

2

Найти, всегда ожидает массив значений ключа. В вашем случае вы пытаетесь использовать строку в качестве объекта 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(); 
+0

Это должно быть сделано! Благодаря! –

+1

'P4W' также работает, несмотря на то, что он преобразуется в дни, поэтому он позволяет коду« говорить за себя », так сказать. 'New DateTime()' также может быть 'new \ DateTime()' – sjagr

+0

. Php docs говорят, что W (недели) преобразуются в дни, поэтому предпочитаю дни вместо недель. – skroczek

Смежные вопросы