0

我一直在尝试很多不同的事情,但我似乎无法找到一种方法来加入......将实体的属性作为一个集合。假设我有用户和联系人。由于某些原因,我想进行如下查询:

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?如何根据实体的属性中的选择来限制选择?

4

2 回答 2

1

尝试以下成员:

SELECT c FROM Bundle:Contact c
LEFT JOIN Bundle:User u WITH c.user = u
WHERE c MEMBER OF u.contacts
于 2013-06-25T11:21:31.540 回答
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)" 
于 2013-05-13T13:18:55.457 回答