oligan
oligan

Reputation: 634

datetime comparaison doctrine querybuilder

I want to delete all the entries from my database where the ending date is reached

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

I get the error

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

I tried many ways but unfortunately without much success.. Any clues ? Thanks !


SOLUTION based on NHG answer

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

Upvotes: 1

Views: 5868

Answers (2)

Sebastian Viereck
Sebastian Viereck

Reputation: 5877

you can compare by Datetime like this:

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

Upvotes: 0

NHG
NHG

Reputation: 5877

I dont't know what is your definition of endingDate field, but you could try to convert a DateTime object to string:

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

EDIT:

So problem is with f argument in $em->createQueryBuilder('f'). Try:

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

Doc. Additionaly I used Flower instead of FlowerEntity.

Upvotes: 4

Related Questions