Symfony2 - 需要有关如何将ManyToMany关系加入查询的帮助

时间:2014-05-12 06:13:22

标签: symfony tags blogs entity-relationship

我目前正在使用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();
}

1 个答案:

答案 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')
    ;

    // ...
}