我有实体Service
和实体Tag
,它们具有多对多关系。如何获得具有所有提供的标签的Service
?
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 - 教义查询:查找包含多对多关联中的数组的实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40420020/