Doctrine 2查询缺少内连接的一部分

时间:2011-03-14 18:44:52

标签: doctrine-orm

我正在使用Doctrine 2尝试使用内部联接进行查询。我有一个Site实体和一个Page实体。每个站点可以有多个页面,每个页面只能属于一个站点。我的页面表行中有一个site_id外键。在我的Site实体中,我创建了一个OneToMany关联,其中目标实体是我的Page实体,mappedBy设置为Site。

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 * @OneToMany(targetEntity="Page", mappedBy="Site", cascade={"persist", "remove"})
 */
private $pages;

在我的Page实体中,我有一个ManyToOne关联,其中目标实体设置为Site。

/**
 * @var App\Entity\Site
 * @ManyToOne(targetEntity="Site")
 */
private $site;

这是我的查询构建器语句,其中我传递了特定的站点ID:

$qb = $this->_em->createQueryBuilder();
$qb->select('s')
    ->from('App\Entity\Site', 's')
    ->innerJoin('s.pages', 'p')
    ->where('s.id = :id')
    ->setParameter('id', $id);

这是我回来的实际SQL:

SELECT s0_.id AS id0, s0_.domain AS domain1 FROM sites s0_ INNER JOIN  WHERE s0_.id = ?

查看INNER JOIN信息是如何完全丢失的?我在这里做错了什么,或者这是Doctrine 2的问题吗?

2 个答案:

答案 0 :(得分:3)

您需要明确告诉Doctrine获取这些列:

$qb->select('s', 'p')
   ->form(...)
   ->join(...) 

答案 1 :(得分:0)

想出来。我的mappedBy语句在Site实体中不正确。当它应该是“网站”时,我指着“网站”。