php - Doctrine 2 DQL - 按精确的 ManyToMany 数组选择

标签 php symfony doctrine-orm

我的 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/

相关文章:

ajax - 如何使用 ajax 和 symfony 在 Twig 部分显示 pdf?

symfony - 学说查询生成器 : semantical error

orm - 为什么 Doctrine 2 没有基本的验证方法来验证所有值是否适合实体属性?

php 无法连接到 mysql 并出现错误 13(但命令行可以)

php - 在 PHP 中触发 500 Internal Server Error 并显示 Apache 错误页面

php - Steam Api Json 转 PHP

soap - 使用soap的段错误php7 symfony cli命令

php - 如何在 Symfony 3 中实现异步队列运行方法

php - 如何在 Symfony 中正确制作注册表单?

mysql - SQLSTATE[HY000] : General error with doctrine2 and no error