我有第一个请求(我使用的是QueryBuilder,但它是一个简单的findAll()):
public function findAllRosters(){
$qb = $this->createQueryBuilder('r')
;
return $qb->getQuery()
->getResult();
}
我想从第一个查询的结果中删除另一个查询的所有结果:
public function findOtherRosters($user){
$qb = $this->createQueryBuilder('r')
->leftJoin('r.members', 'm')
->addSelect('m')
->where('m.user = :user')
->setParameter('user', $user)
;
return $qb->getQuery()
->getResult();
}
有简单的方法吗?似乎使用NOT IN可能是前进的方向..
修改 我试图遵循这个例子:https://stackoverflow.com/a/22616937/4228086看到我的答案
答案 0 :(得分:1)
看看这个stackoverflow solution 这里q2是你的第二个查询,你希望用。减少第一个结果的子结果。
希望有所帮助。
答案 1 :(得分:0)
经过大量谷歌搜索;我终于找到了正确的查询:
public function findOtherRosters($user){
$q2 = $this->createQueryBuilder('r')
->leftJoin('r.members', 'm')
->addSelect('m')
->where('m.user = :user')
->setParameter('user', $user);
$qb = $this->createQueryBuilder('ro');
$qb
->where('ro not IN (:rosters)')
->setParameter('rosters', $q2->getQuery()->getResult())
;
return $qb->getQuery()
->getResult();
}
希望它可以帮助其他人解决同样的问题