2011-03-14 78 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',但是我只是從查詢中刪除了所有無關的東西來簡化我的問題。 –