2015-07-01 25 views
0

我的第一请求从请求删除结果(我用的QueryBuilder但它是一个简单的findAll()):Symfony的查询生成器:从另一个请求

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可能是前进的道路..

编辑 我试图按照本例:https://stackoverflow.com/a/22616937/4228086看到我的回答

回答

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

希望它可以帮助其他有同样问题

1

看一看这个stackoverflow solution 这里Q2是你的第二个查询,你想减少第一个结果的子结果。

希望有所帮助。