Symfony Query Builder:从另一个请求中删除一个请求的结果
Symfony Query Builder: remove results from a request from another requests
我有第一个请求(我使用了 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();
}
有没有简单的方法?似乎使用 where NOT IN 可能是前进的方向..
编辑
我试着遵循这个例子: 看我的回答
看看这个Whosebug solution
这里 q2 是你的第二个查询,你想要减少第一个结果的子结果。
希望对您有所帮助。
经过多次谷歌搜索;我终于找到了正确的查询:
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();
}
希望能帮到有同样问题的人
我有第一个请求(我使用了 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();
}
有没有简单的方法?似乎使用 where NOT IN 可能是前进的方向..
编辑 我试着遵循这个例子: 看我的回答
看看这个Whosebug solution 这里 q2 是你的第二个查询,你想要减少第一个结果的子结果。
希望对您有所帮助。
经过多次谷歌搜索;我终于找到了正确的查询:
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();
}
希望能帮到有同样问题的人