2013-02-05 84 views
1

存在類似的問題,但我沒有發現任何提到無聲連接表問題。使用連接表將SQL轉換爲DQL(Doctrine2)

我有一個簡單的SQL查詢連接,但不能將其轉換爲DQL,因爲這個連接表。有兩個實體,商店和客戶端,通過ManyToMany關聯鏈接。

Doctrine2默默地做了一個連接表:shop_client

現在,如果我要得到所有不屬於給定店客戶我simlpy做:

SELECT c.name FROM `client` AS c 
JOIN `shop_client` AS sc 
    ON sc.client_id = c.id 
    AND sc.shop_id != :shop_id 

這是直線前進,真的很容易,但我不能拿出DQL版。我試圖使用「EXISTS」,「NOT IN」,「SIZE」,但永遠不會結束工作的DQL查詢。

編輯:我的商店實體有一個clients字段,但客戶實體沒有shops字段。

回答

1
SELECT 
    c 
FROM 
    Client c 
WHERE 
    c.id IN (
     SELECT 
      c2.id 
     FROM 
      Shop s2 
     JOIN 
      s2.clients c2 
     WHERE 
      s2.id != :shopId 
    ) 

此外,考慮到構建這樣的查詢而沒有實體定義就像在黑暗中拍攝一樣。下次發佈他們的問題。

+0

這幾乎奏效。我將「IN」改爲「NOT IN」,將「!=:shopId」改爲「= shopId」,這很好。謝謝!驗證 – Ninj