簡體   English   中英

以左聯接和對象為結果的Symfony2學說查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM