加入entity.collection原则2

时间:2013-05-13 07:51:42

标签: symfony doctrine-orm dql

我一直在尝试很多不同的东西,但我似乎无法找到JOIN的方法......将实体的属性作为集合。 说我有用户和联系人。由于原因,我想进行如下查询:

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

我知道这个查询似乎没有任何意义,但我正在处理的实际查询是:)

所以Doctrine不接受该查询,因为它在IN之后需要SELECT ... FROM。 如何进行查询以便检查c是否属于集合u.contacts?如何根据实体属性中的select来限制选择?

2 个答案:

答案 0 :(得分:0)

好吧,说实话,我不知道你想做什么。我会给你两个例子,一个可能是你需要的,或者至少可以让你知道该怎么做。

第一个问题;你的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)" 

答案 1 :(得分:0)

尝试成员:

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