I\'m attempting to build a query in Doctrine 2 that finds all Vacancy entities which are related to any of the given VacancyWorkingHours entities.<
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);
;
I think the DQL will work better for that.
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery(
'SELECT v
FROM YourAppYourBundle:YourEntity v // exemple AcmeexampleBundle:YourEntity
WHERE v.workingHours IN :workingHours'
)->setParameter('workingHours', $workingHours->toArray());
$vacancies = $query->getResult();
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.
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.