2016-09-27 70 views
2

我有一個職位表相關的多對一的作者表。兩個表都與第三個表(喜歡)相關,表示哪些用戶喜歡哪些帖子。我想選擇作者和喜歡的帖子,但不知道如何在獲取結果後訪問連接的對象。我查詢生成器看起來如下:Doctrine/Symfony查詢生成器添加選擇左加入

$result = $em->createQueryBuilder() 
      ->select('p')    
      ->from('Post', 'p') 
      ->leftJoin('p.author', 'a') 
      ->leftJoin('p.likes', 'l', 'WITH', 'l.post_id = p.id AND l.user_id = 10') 
      ->where("p.foo = bar") 
      ->addSelect('a AS post_author') 
      ->addSelect('l AS post_liked') 
      ->getQuery()->getResult(); 

在上文中,筆者將永遠是有效的,在類似值可能爲空,如果請求的用戶(用戶10中的例子)並沒有與信息進行了互動。查詢工作正常,但我無法訪問別名post_author或post_liked的數據。由此產生的數據是這樣的:

[ 
    [0] => Doctrine PostEntity, 
    [1] => Doctrine PostEntity, 
    ... 
] 

我想要的東西,看起來更像是這樣的:

[ 
    [0] => ['post' => Doctrine PostEntity, 
      'post_author' => Doctrine UserEntity, 
      'post_liked' => Doctrine LikeEntity], 
    [1] => ['post' => Doctrine PostEntity, 
      'post_author' => Doctrine UserEntity, 
      'post_liked' => Doctrine LikeEntity], 
    ... 
] 

是我只是試圖加載作者,它會是很好的,因爲我可以加載來自已加載帖子的作者值(Doctrine會自動使用來自作者表的所選聯合數據保存對象)。例如:

$post = $result[0]; 
$author = $post->getAuthor(); // Doctrine UserEntity 

如果我嘗試爲當前用戶加載類似問題,則會出現此問題。例如:

$post = $result[0]; 
$like = $post->getLike(); // INVALID - there's no property "like" on Post 
$likes = $post->getLikes(); // valid, but loads the whole collection 
$like = $post->post_liked; // INVALID - the SQL alias is not a valid object property 

如何訪問查詢中指定的數據?

+0

您是否嘗試過''select('p','a','l')''? –

+0

我相信你在嘗試使用實體時不可能做到這一點。但是,如果你願意在這種情況下使用數組,這是可能的。爲此只需使用' - > getArrayResult()'。 –

+0

@EmanuelOster getArrayResult()看起來更接近,但我仍然看不到post_author或post_liked鍵。有沒有辦法選擇連接表作爲別名? – CaptainStiggz

回答

0

我最終使用了$query->getArrayResults(),它根據原則配置中的關聯命名使用集合填充數組。查詢中的AS關鍵字僅用作查詢本身的鉤子,而不是輸出數組/實體水合。請參閱我的answer here