通过计算他的关系来获取实体,即使他们没有';还没有关系(ManyToMany)-原则2


Fetch entities by count of his relationships, even if they haven't yet relation (ManyToMany) - Doctrine 2

我正试图通过与另一个实体(名为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(); 
}