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.
The Vacancy
entity looks as follows:
/**
* Vacancy
*
* @ORM\Table(name="vacancy")
* @ORM\Entity(repositoryClass="JaikDean\CareersBundle\Entity\VacancyRepository")
*/
class Vacancy
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var VacancyWorkingHours
*
* @ORM\ManyToOne(targetEntity="VacancyWorkingHours", inversedBy="vacancies")
* @ORM\JoinColumn(name="vacancy_working_hours_id", referencedColumnName="id")
**/
private $workingHours;
/* Other fields and methods are inconsequential */
}
My query currently looks as follows, but returns no results because of the where clause. In this example, $workingHours
is a Doctrine\Common\Collections\ArrayCollection
instance containing a number of VacancyWorkingHours
entities
$q = $this->createQueryBuilder('v')
->select('v')
->andWhere('v.workingHours IN (:workingHours)')
->setParameter('workingHours', $workingHours->toArray());
;
A pull request I made about this has been merged into Doctrine ORM 2.5, so you can simply do this now:
The latest version of Doctrine now allows collection parameters and will automatically make use of the primary key of each of the collection entries.
Try to set IDs as parameter
Then
I think the DQL will work better for that.
I suggest using DQL in this way:
And let Doctrine handle the expression & quotation work for you.