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();
}

希望能帮到有同样问题的人