通过他的关系数获取实体,即使他们还没有关系(ManyToMany) - Doctrine 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 个标签的动画,即使没有标签链接到它们也是如此。

我使用 Doctrine Query Builder 在我的 AnimationRepository 中创建了一个“findAnimsByTag()”方法,如下所示:

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 个标签的实体,但不会获取尚未关联的实体(如 post 顶部所述)。

我该怎么做?

使用 leftJoin 而不是 join

 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(); 
}