2013-05-13 85 views
0

我一直在嘗試很多不同的事情,但我似乎無法找到一種方法來加入...與實體的屬性作爲集合。 說我有用戶和聯繫人。由於原因,我希望做一個查詢,如:加入entity.collection Doctrine 2

SELECT c FROM Bundle:Contact c 
LEFT JOIN Bundle:User u WITH c.user = u 
WHERE c IN u.contacts 

我知道該查詢似乎沒有任何意義,但我工作的實際查詢呢:)

因此,學說不接受該查詢,因爲它在IN之後期望SELECT ... FROM。 如何進行查詢以便我可以檢查c屬於集合u.contacts?如何根據實體屬性中的select來限制選擇?

回答

0

好吧,說實話,我不知道你在做什麼。我會給你2個例子,其中一個可能是你需要的,或者至少讓你知道該怎麼做。

第一個問題;你的WITH和IN條件對我來說沒有多大意義。如果你想加入一些用戶,你應該這樣做:

//ContactRepository 
public function findMeSomething() 
{ 
    $subquery = "SELECT s1.id FROM Bundle:User s1 WHERE ... some condition" ; 

    return $this->createQueryBuilder("c") 
     ->leftJoin("c.Users", "u", "WITH", "u.id IN ($subquery)" 
     ... 

這將加入聯繫其用戶;不是全部,用戶將被$ subquery限制。

第二:如果你想限制獲取聯繫人(主要選擇),然後

$subquery = "SELECT s1.id FROM Bundle:Contact s1 WHERE ... some condition" ; 
    ->where("c.id IN ($subquery)" 
+0

首先,感謝你回答。我試過使用子查詢,但無論我在哪裏放置條件,我總是必須使用IN(例如,WHERE c IN u.contacts),它需要一個子查詢。 這裏,用戶有一個屬性聯繫人,它是一組聯繫人。我希望查詢將聯繫人限制爲屬於此集合的聯繫人,並且具有不依賴子查詢而是依賴集合的子句。 – 2013-05-13 13:23:33

0

嘗試員:

SELECT c FROM Bundle:Contact c 
LEFT JOIN Bundle:User u WITH c.user = u 
WHERE c MEMBER OF u.contacts