特定のテストを完了したユーザーのコレクションと、そのテストへの招待を受けたユーザーのリストがあります。ここで、テストを完了していないすべてのユーザーを取得したいと思います。2 つのコレクション (配列など) を比較するのは簡単だと思いましたが、Doctrine_Collection::merge()
可能なのはそれだけです。
私のデータモデル(わかりやすくするために省略しています):
Invite:
columns:
id: integer (10)
relations:
users:
foreignAlias: invites
class: User
refClass: UserInvite
UserInvite:
columns:
user_id: integer (10)
invite_id: integer (10)
relations:
user:
class: User
foreignAlias: userInvite
invite:
class: Invite
foreignAlias: userInvite
Test:
columns:
id: integer (10)
user_id: integer (10)
invite_id: integer (10)
relations:
user:
class: User
foreignAlias: tests
invite:
class: Invite
foreignAlias: tests
これで、次の 2 つのコレクションを利用できるようになりました。
$invite = new Invite;
$invite = $invite->users; // All the users who got an invite
$invite = $invite->tests; // All the tests performed for this invite
すべてのユーザーを取得するための最良の方法は何ですか? SQL クエリを実行できますが、OOP php や DQL クエリでこれを実行するのは好きではありません。SQL では、次のようなことができます。
SELECT u.name, u.id
FROM user u
LEFT JOIN userinvite i
ON i.user_id = u.id
LEFT JOIN test t
ON t.user_id = u.id
WHERE i.id IS NOT NULL
AND t.id IS NULL