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
如何訪問查詢中指定的數據?
您是否嘗試過''select('p','a','l')''? –
我相信你在嘗試使用實體時不可能做到這一點。但是,如果你願意在這種情況下使用數組,這是可能的。爲此只需使用' - > getArrayResult()'。 –
@EmanuelOster getArrayResult()看起來更接近,但我仍然看不到post_author或post_liked鍵。有沒有辦法選擇連接表作爲別名? – CaptainStiggz