2014-10-03 1 views
1

Я хочу, чтобы удалить все записи из моей базы данных, где дата окончания достигаетсяDateTime comparaison учение QueryBuilder

$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

Я dont't знаю, что ваше определение endingDate поля, но вы могли бы попытаться преобразовать DateTime объект в строку:

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

EDIT:

Итак, проблема заключается в аргументе f в $em->createQueryBuilder('f'). Попробуйте:

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

Doc. Additionaly Я использовал Flower вместо FlowerEntity.

+0

endDate также является dateTime, как я могу изменить его в строку? я пробовал f.endingDate-> format (..) в запросе, но он заставлял ожидаемый параметр 1 быть объектным логическим (он выглядел настолько грязным, что я не решался попробовать этот LOL) – oligan

+0

@oligan Я обновил свой ответ. – NHG

+0

хороший улов, я тоже обновил свой ответ. thanksss – oligan