我正在使用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的问题吗?
答案 0 :(得分:3)
您需要明确告诉Doctrine获取这些列:
$qb->select('s', 'p')
->form(...)
->join(...)
答案 1 :(得分:0)
想出来。我的mappedBy语句在Site实体中不正确。当它应该是“网站”时,我指着“网站”。