[英]Symfony2 Doctrine Query with Left Join and Objects as the result
我是該學說的新手,現在我想做以下事情。
表“ user_friend”:
id | user_id | friend_user_id
該表包含聯系人列表的條目。
現在我想獲得條目的結果,例如:
SELECT * FROM user_friend a
LEFT JOIN user_friend b
ON (b.user_id = 10 AND b.friend_user_id = a.user_id)
WHERE b IS NULL
該查詢將在那里從聯系人列表中獲取未由另一邊的朋友確認的條目(WHERE b IS NULL,他尚未將“我”添加到他的聯系人列表中)。 我希望你理解我在尋找什么。
我不確定WHERE b IS NULL是否正確,或者不確定如何在一個查詢中簽入另一個條目(表中已確認的朋友),對此的正確方法是什么? 我的想法就像是左聯接,您可以在上面看到。
其次,我不知道如何使用Symfony2中的學說來做到這一點。 現在我知道EntityManager和-> findBy方法。 這個方法返回對象,很好。
我嘗試了$ em-> createQueryBuilder()了一點,但是在那兒的leftJoin無法達到我的目標。 如果是左聯接,是否必須使用createQueryBuilder還是可以通過EntityManager進行? 讓我們也問:哪種方法更好? 第三,我不知道如何從createQueryBuilder獲取實體對象。 -> getQuery()-> getResult()。 我需要水合結果嗎?
對此的一些示例代碼將非常不錯!
謝謝。 晚上好。
在SQL中,您必須在WHERE語句中定義列的名稱,因此除了b IS NULL
還需要為b.user_id IS NULL
SELECT * FROM user_friend a
LEFT JOIN user_friend b
ON (b.user_id = 10 AND b.friend_user_id = a.user_id)
WHERE b.user_id IS NULL
使用NOT EXISTS
編寫相同查詢的另一種方法
SELECT * FROM user_friend a
WHERE NOT EXISTS (
SELECT * FROM user_friend b
WHERE b.user_id = 10
AND b.friend_user_id = a.user_id
)
使用NOT EXISTS
在DQL中進行相同查詢
$qb->select("a")
->from("MyBundle\Entity\UserFriend a")
->where('NOT EXISTS (
SELECT b
FROM MyBundle\Entity\UserFriend b
WHERE b.user_id = :user_id
AND b.friend_user_id = a.user_id
)')
->setParameter('user_id', 10);
在您的DQL中,請確保使用實體字段名稱,該名稱不一定與數據庫列名稱相同(即,用戶ID可能存儲在名為“ user_id”的列中,但實體的字段名稱可能只是“ id”或“ userId”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.