Symfony查询生成器:从其他请求中删除请求的结果

时间:2015-07-01 09:25:40

标签: symfony doctrine-orm query-builder

我有第一个请求(我使用的是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看到我的答案

2 个答案:

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

希望它可以帮助其他人解决同样的问题