我正试图通过与另一个实体(名为Tag)的ManyToMany关系来获取一个实体集合(名为Animation)。
这是我的动画实体:
class Animation
{
/**
* @ORM'ManyToMany(targetEntity="Company'AppBundle'Entity'Tag",inversedBy="animations")
*/
protected $tags;
}
我的标签实体:
class Tag
{
/**
* @ORM'ManyToMany(targetEntity="Company'AppBundle'Entity'Animation", mappedBy="tags")
* @ORM'JoinTable(name="animation_tag")
*/
protected $animations;
}
我只想获取链接了少于3个标签的动画,即使没有标签链接到它们。
我创建了一个";findAnimsByTag()"方法在我的动画库中使用Doctrine Query Builder,如下所示:
public function findAnimsByTag() {
return $this->getEntityManager()->createQueryBuilder()
->select('a')
->from('CompanyAppBundle:Animation', 'a')
->join('a.tags', 't')
->groupBy('t')
->having('COUNT(t) < 3 ')
->getQuery()
->getResult();
}
这个查询可以很好地获取不超过3个标签的实体,但不会获取尚未建立关系的实体(如文章顶部所解释的)。
我该怎么做?
使用leftJoin代替加入
public function findAnimsByTag() {
return $this->getEntityManager()->createQueryBuilder()
->select('a')
->from('CompanyAppBundle:Animation', 'a')
->leftJoin('a.tags', 't')
->groupBy('t')
->having('COUNT(t) < 3 ')
->getQuery()
->getResult();
}