Извлекать сущности по количеству его отношений, даже если они еще не связаны (ManyToMany) — Доктрина 2

Я пытаюсь получить коллекцию сущностей (которая называется Animation) по его связи ManyToMany с другой сущностью (которая называется Tag).

Вот моя анимация:

class Animation
{
/**
* @ORM\ManyToMany(targetEntity="Company\AppBundle\Entity\Tag",inversedBy="animations")
*/
protected $tags;

}

И мой тег Entity:

class Tag
{
/**
* @ORM\ManyToMany(targetEntity="Company\AppBundle\Entity\Animation", mappedBy="tags")
* @ORM\JoinTable(name="animation_tag")
*/
protected $animations;
}

Я просто хочу получить анимации, которые имеют менее 3 тегов, даже если ни один тег не связан с ними.

Я создал метод findAnimsByTag () в моем AnimationRepository при использовании 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 тегов, но не получают сущности, которые еще не имеют отношения (как объяснено в верхней части поста).

Кто-нибудь, чтобы помочь мне?

(Я буду редактировать пост, если кому-то понадобится более подробная информация.)

1

Решение

Используйте 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();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]