2013-05-13 88 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