php - 学说查询 : find entity that contains array in many-to-many association

标签 php mysql symfony doctrine-orm query-builder

我有实体 Service 和实体 Tag,它们具有多对多关系。我怎样才能获得具有所有提供标签的服务

class Service{
      /**
      * @ORM\ManyToMany(targetEntity="Tag", mappedBy="serviceList")
      */
     private $tagList;
}


class Tag{
     /**
      * @ORM\ManyToMany(targetEntity="Service", inversedBy="tagList")
      * @ORM\JoinTable(name="tags_services")
      */
      private $serviceList;
}

所以现在在 ServiceRepository 中我正在这样做:

 $qb = $this->createQueryBuilder('service');
 $qb->leftJoin('service.tagList', 'tag');
 $tagArray = explode(",", $tagList);
 $qb->expr()->in('tag.id', $tagArray);

但此查询返回的服务至少具有提供的标签中的一个,而不是所有标签。

是否可以使用 $qb->expr()->* 方法实现这个查询?

最佳答案

根据 Cerad 的建议在 his comment ,您必须为每个标签添加 where/andWhere 条件以检索包含所有标签的服务:

$qb = $this->createQueryBuilder('service');
$qb->leftJoin('service.tagList', 'tag');
$tagArray = explode(",", $tagList);
$i = 0;
foreach($tagArray as $tag){
    if($i == 0){
        $qb->where('tag.id = :tag'.$i);
    } else {
        $qb->andWhere('tag.id = :tag'.$i);
    }
    $qb->setParameters('tag'.$i, $tag);
    $i++;
}

关于php - 学说查询 : find entity that contains array in many-to-many association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40420020/

相关文章:

php - 如何查看 mysql 是否替换或插入我的查询

mysql - 基础数据仓库 - 如何连接 2 个表之外的数据

symfony - 可以在Symfony2 + Twig中使用变量进行翻译吗?

php - 在 Nginx 上安装 wordpress - Nginx 发送 install.php

php - PHP 中的 POST 和原始 POST 有什么区别?

php - 使用 PHP 创建 MongoDB 的 ISODate

mysql - 从记录所在的地方删除

mysql - 查询结构 - 忽略来自多个用户的同一事件的条目?

javascript - 输入数量按钮加减

logging - Symfony 2 : Log into a specific file