我目前正在使用createQueryBuilder加入One ToMany和ManyToOne的2个实体(类别和博客)。
我最近在博客(ManyToMany / ManyToMany)中添加了一个标记实体,并希望在同一个查询中加入它。
我该怎么做?
当前查询:
public function getBlogs($limit = null)
{
$qb = $this->createQueryBuilder('b')
->select('b, c')
->leftJoin('b.category', 'c')
->addOrderBy('b.created', 'DESC');
return $qb->getQuery()
->getResult();
}
标签实体:
/**
* @ORM\ManyToMany(targetEntity="Blog", mappedBy="tags")
*/
protected $blogs;
public function __construct()
{
$this->blogs = new ArrayCollection();
}
博客实体:
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="blogs")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="blogs")
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
*/
protected $tags;
public function __construct()
{
$this->tags = new ArrayCollection();
}
类别实体:
/**
* @ORM\OneToMany(targetEntity="Blog", mappedBy="category")
*/
protected $blogs;
public function __construct()
{
$this->blogs = new ArrayCollection();
}
答案 0 :(得分:1)
通过执行以下操作,这应该非常简单:
public function getBlogs($limit = null)
{
$qb = $this->createQueryBuilder('b')
->select('b, c, tag')
->leftJoin('b.category', 'c')
->leftJoin('b.tags', 'tag')
->addOrderBy('b.created', 'DESC')
;
// ...
}