2011-03-14 34 views
3

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

/** 
* @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信息完全丢失?我在这里做错了什么,或者这是教条2的问题?

回答

0

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

3

你需要明确地告诉学说来获取这些列:

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

只要我有''包含在那里,我选择什么并不重要。在我真正的查询中,我包含'p',但是我只是从查询中删除了所有无关的东西来简化我的问题。 –