如何使用Propel ORM来做NOT IN或LEFT JOIN/IS NULL ?


How do you do NOT IN or LEFT JOIN/IS NULL with Propel ORM?

嗨,我希望在我的数据库中选择不在另一个表中的行。如果外键行存在,我不希望在结果集中包含表行。

例如:

Group Table
Id - Title - Motto - Logo
Member Table
Id - FirstName - LastName
GroupMemberMap Table
Id - Group - Member

我想获得未分配给组的所有成员。

谁知道如何用Propel做到这一点?

两个例子:

左加入

SELECT * FROM member m LEFT JOIN member_group mg ONmember_id = m.id WHERE mg。member_id IS NULL

$c = new Criteria();
$c->addJoin(MemberPeer::ID, MemberGroupPeer::MEMBER_ID, Criteria::LEFT_JOIN);
$c->add(MemberGroupPeer::MEMBER_ID, NULL, Criteria::ISNULL);
return MemberPeer::doSelect($c);

子查询

SELECT * FROM member member WHERE id NOT IN (SELECT DISTINCT(member_id) FROM member_group)

$c = new Criteria();
$subQuery = sprintf('SELECT DISTINCT(%s) FROM %s', MemberGroupPeer::MEMBER_ID, MemberGroupPeer::TABLE_NAME);
$c->add(MemberPeer::ID, MemberPeer::ID . ' NOT IN (' . $subQuery . ')', Criteria::CUSTOM);
return MemberPeer::doSelect($c);

让我知道。:)

你能说得更具体点吗?

否则,使用<> ?