1
我有实体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()->*
方法实现此查询?
也许'having'条款将帮助。例如:'$ this-> createQueryBuilder('service') - > leftJoin('service.tagList','tag') - > having('tag.id IN(:ids)') - > setParameter('ids',爆炸(“,”,$ tagList));' – rokas
正如你发现的,IN选择任何。你需要做的是对$ tagList进行foreach,并为每个标签添加一个andWhere/setParameter,以便最终使用WHERE tag.id =? AND tag.id =?等总是使用参数来防止SQL注入。 – Cerad