-2
User:
id | name
1  | one
2  | two
3  | three
4  | four
5  | five


House:
id | name
1  | London
2  | Barcelona

UserHouse:
id_user | id_house
 1      |  1
 2      |  2
 4      |  1


$q = Doctrine_Query::create()
  ->from('User u')
   // many selectors here
  ->leftJoin('u.UserHouse uh')
  ->addWhere('????????');

$users = $q->execute();

House のないすべてのユーザーを取得したい (つまり、UserHouse テーブルにない) - これにより、ユーザー 3 と 5 が返されます。

私は知っています、私は使用できます:

->from('UserHouse uh')

次のユーザーとの関係ですが、私は持って使用する必要があります:

  ->from('User u')

このクエリを多くのセレクターで使用しているため、これを編集できません。->from('User u') から始める必要があり ます

だから私は何を記入しなければならない->addWhere('????????')これは私に家のないユーザーを返すのですか?

Doctrine を使用していない場合、単に SQL でこれを取得するにはどうすればよいですか?

4

1 に答える 1

1

SQL では、このタイプのクエリにはEXCEPTION JOIN. 一部の RDBMS は実際にこれを別のタイプ (DB2 など) として実装しますが、他のものは回避策を使用する必要があります。あなたの場合、それは(SQLで)次のようになります。

SELECT User.* 
FROM User
LEFT JOIN UserHouse
ON UserHouse.id_user = User.id
WHERE UserHouse.id_user IS NULL

これにより、予想される「家にいない」レコードが生成されます。

このサイトの多くの場所に同様の例があります。

私はDoctrineを使ったことがないので、あなたを助けることはできません. しかし、私の最善の推測は次のようになります。

addWhere('uh IS NULL')

また

addWhere('uh.id_user IS NULL')
于 2012-09-12T17:20:06.377 に答える