我的 ClassA 与 ClassB 具有多对多关系,有没有办法通过 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 实体之一以及具有其中三个实体的任何 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 才能实现此功能。
关于php - Doctrine 2 DQL - 按精确的 ManyToMany 数组选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625306/