Php 两个集合实例的差异

Php 两个集合实例的差异,php,mysql,collections,doctrine,doctrine-collection,Php,Mysql,Collections,Doctrine,Doctrine Collection,我有一个完成某个测试的用户集合和一个获得该测试邀请的用户列表。现在,我想获取所有未完成测试的用户。我认为区分两个集合(如数组)会很简单,但只有Doctrine_Collection::merge是可能的 为了清晰起见,我的数据模型被遗漏了很多: Invite: columns: id: integer (10) relations: users: foreignAlias: invites class: User refClass: U

我有一个完成某个测试的用户集合和一个获得该测试邀请的用户列表。现在,我想获取所有未完成测试的用户。我认为区分两个集合(如数组)会很简单,但只有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
现在我可以使用这两个系列:

$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

好的,我现在知道我必须通过用户模型本身来解决这个问题。此DQL查询从特定邀请中获取所有错过测试的用户:

$user  = new User;
$users = $user->getTable()
              ->getQueryObject()
              ->leftJoin('User.userInvite i')
              ->leftJoin('User.tests t')
              ->where('i.invite_id = ?', $invite->id)
              ->andWhere('i.user_id IS NOT NULL')
              ->andWhere('t.user_id IS NULL')
              ->execute();