与えられたVacancy
エンティティのいずれかに関連するすべてのVacancyWorkingHours
エンティティを見つけるDoctrine 2でクエリを構築しようとしています。
Vacancy
エンティティは次のようになります。
/**
* 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 */
}
私のクエリは現在次のように見えますが、where句のために結果を返しません。この例では、$workingHours
はDoctrine\Common\Collections\ArrayCollection
多数のVacancyWorkingHours
エンティティを含むインスタンス
$q = $this->createQueryBuilder('v')
->select('v')
->andWhere('v.workingHours IN (:workingHours)')
->setParameter('workingHours', $workingHours->toArray());
;
プルリクエスト これについて作成したものはDoctrine ORM 2.5にマージされました。
$q = $this->createQueryBuilder('v')
->select('v')
->andWhere('v.workingHours IN (:workingHours)')
->setParameter('workingHours', $workingHours);
;
Doctrineの最新バージョンは、コレクションパラメータを許可し、各コレクションエントリのプライマリキーを自動的に使用します。
IDをパラメーターとして設定してみてください
$ids = array();
foreach($workingHours as $w) {
$ids[] = $w->getId();
}
それから
$q = $this->createQueryBuilder('v')
->select('v')
->andWhere('v.workingHours IN (:workingHours)')
->setParameter('workingHours', $ids);
;
そのためには、DQLの方がうまくいくと思います。
$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();
Doctrine 2.5-コレクションをパラメーターとして使用するWHERE INクエリ