Doctrine 2 WHERE IN clause using a collection of entities

A pull request I made about this has been merged into Doctrine ORM 2.5, so you can simply do this now:

$q = $this->createQueryBuilder('v')
    ->select('v')
    ->andWhere('v.workingHours IN (:workingHours)')
    ->setParameter('workingHours', $workingHours);
;

The latest version of Doctrine now allows collection parameters and will automatically make use of the primary key of each of the collection entries.


I suggest using DQL in this way:

$qb = $this->createQueryBuilder('v')
    ->andWhere($qb->expr()->in('v.workingHours', $ids));
;

And let Doctrine handle the expression & quotation work for you.


Try to set IDs as parameter

$ids = array();
foreach($workingHours as $w) {
    $ids[] = $w->getId();
}

Then

$q = $this->createQueryBuilder('v')
    ->select('v')
    ->andWhere('v.workingHours IN (:workingHours)')
    ->setParameter('workingHours', $ids);
;