2016-08-02 32 views
0

有什麼辦法可以做到這一點。嘗試不同的事情讓我越來越困惑。主義在不相關的實體上留下來加入

我有一個實體會議,可以有一個地方。 地方與城市有多對一的關係。

在我的查詢中,我試圖檢索城市信息,但似乎無法在相同的地方找到結果。 這是一個用來查詢:

$qbt = $this->_em->createQueryBuilder(); 
$qbt 
    ->select('conference', 'diffusion', 'speaker', 'placediff', 'confcity') 
    ->from('AppBundle:Conference', 'conference') 
    ->leftJoin('conference.diffusion', 'diffusion') 
    ->leftJoin('conference.speaker','speaker') 
    ->leftJoin('conference.place','placediff') 
    ->leftJoin('AppBundle:City', 'confcity', 'WITH', 'confcity.id = placediff.city'); 

return $qbt 
    ->getQuery() 
    ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true) 
    ->useQueryCache(true) 
    ->useResultCache(true, 3600) 
    ->getArrayResult(); 

這有什麼回報,目前只有一個會議。 雖然很想擁有第二個數組。

query result

如何做到這一點任何想法?非常感謝〜

(UPDATE)在此期間我切換到原始SQL查詢,但真正在尋找一種方式來做到這一點使用DQL

public function rawConf() 
    { 
     $conn = $this->getEntityManager()->getConnection(); 
     $sql = 'SELECT 
    c0_.id AS id, 
    c0_.startAt AS startat, 
    c0_.comment AS comment, 
    d1_.id AS diffusion_id, 
    d1_.hour AS diffusion_hour, 
    s2_.id AS speaker_id, 
    c0_.place_id AS place_id, 
    c0_.sponsor_id AS sponsor_id, 
    c0_.tour_id AS tour_id_8, 
    d1_.movie_id AS diffusion_movie_id, 
    s2_.contact_id AS speaker_contact_id, 
    c6_.name AS ville_name, 
    c6_.postal AS ville_post, 
    c6_.department as ville_depart 
FROM 
    conference c0_ 
    LEFT JOIN conference_diffusion c3_ ON c0_.id = c3_.conference_id 
    LEFT JOIN diffusion d1_ ON d1_.id = c3_.diffusion_id 
    LEFT JOIN conference_speaker c4_ ON c0_.id = c4_.conference_id 
    LEFT JOIN speaker s2_ ON s2_.id = c4_.speaker_id 
    LEFT JOIN place p5_ ON c0_.place_id = p5_.id 
    LEFT JOIN city c6_ ON (c6_.id = p5_.city_id)'; 

     $stmt = $conn->prepare($sql); 

     $stmt->execute(); 

     return $stmt->fetchAll(); 

    } 
+0

Update =>顯然可以返回結果爲> getResult(\ Doctrine \ ORM \ Query :: HYDRATE_SCALAR)併合並所有屬性。任何我應該知道這樣做? –

+0

嗯不行,SCALAR HYDRATE重複列 –

+0

通過編輯不發表評論,在原文中發佈更新。此外,您的圖片太小,無法理解寫在那裏的內容。您可以在此張貼裁剪後的圖像或張貼預覽圖像,鏈接到全尺寸圖像。但是你也可以在帖子正文中發佈這個輸出。 –

回答

0

你應該從「地方」「城市」爲「$城市「是Place實體的財產。試試這個簡單的查詢,看看它的工作原理:

$qbt = $this->_em->createQueryBuilder(); 
$qbt 
    ->select('conference') 
    ->addSelect('place') 
    ->addSelect('city') 
    ->from('AppBundle:Conference', 'conference') 
    ->innerJoin('conference.place', 'place') 
    ->innerJoin('place.city', 'city') 
; 

而且如果它的工作原理 - 你可以很容易地添加更多的連接,如果你需要。