通过他的关系数获取实体,即使他们还没有关系(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();
}
我正在尝试通过与另一个实体(名为 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();
}