[英]Doctrine 2 DQL - Select by exact ManyToMany array
我有與ClassB有ManyToMany關系的ClassA,是否可以通過ClassB數組選擇ClassA實體? 目前我有:
$query = $em->createQuery("
SELECT a FROM Bundle:ClassA a
JOIN a.classB b
WHERE b IN (:classBEntities)
")
->setParameter('classBEntities', $classBEntities);
作為$ classBEntities,是ClassB實體的數組。 該查詢的問題在於,如果我正在查找具有ClassB實體1、2和3的ClassA實體,它將返回具有這3個ClassB實體之一和具有這三個ClassB實體的任何ClassA實體,但是我只需要選擇具有數組包含的所有實體的實體即可。
$queryBuilder = $em
->getRepository('Bundle:ClassA')
->createQueryBuilder('a')
->leftJoin('a.classB', 'b')
;
foreach ($classBentities as $entity) {
$queryBuilder
->andWhere('b IN (:b_entity)')
->setParameter('b_entity', array($entity))
;
}
$queryBuilder
->add('where', $queryBuilder->expr()->count('b'), '=' , ':count_b')
->setParameter('count_b', count($classBentities))
$result = $queryBuilder->getQuery()->getResult();
您需要Doctrine> = 2.1才能起作用。
經過使用nifr的反復試驗后,我得到了解決方案,這是如果有人遇到相同的問題:
$queryBuilder = $em->getRepository('Bundle:ClassA')
->createQueryBuilder('a')
->join('a.classB', 'b');
->groupBy('a.id')
->having('COUNT(b) = :cB')
->setParameter('cB', count($classBEntities));
foreach ($classBEntities as $entity)
{
$id = $entity->getId();
$queryBuilder
->join('a.classB', 'b'.$id)
->andWhere('b'.$id.'.id IN (:b_entity'.$id.')')
->setParameter('b_entity'.$id, array($id));
}
$result = $queryBuilder->getQuery()->getResult();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.