2017-02-13 59 views
0

我正在開發一個symfony 3的應用程序,我想用查詢生成器創建一個自定義查詢。
我有一個實體名稱:Bien有很多地址(地址是另一個實體)。所以我想讓所有不在布恩實體中存在的地址。用symfony中的querybuilder創建一個特定的查詢

,我要生成查詢是:
select a.id from address a where a.id not in (select b.address_id from bien b)

在我AddressRepository我這樣做:

public function getAdressesByRueNotJoined($rue) 
    { 
     $qb2 = $this->createQueryBuilder('ab') 
      ->from('BienBundle:Bien', 'bi'); 
     $qb = $this->createQueryBuilder('a'); 

     return 
      $qb->where('a.rue = :rue') 
       ->setParameter('rue', $rue) 
       ->andWhere(
        $qb->expr()->notIn('a', $qb2->getDQL()) 
       ) 
       ->getQuery() 
       ->getResult(); 
    } 

返回的查詢是:

選擇a0_.id AS ID_0 ,a0_.name AS name_1,a0_.rue_id AS rue_id_2 FROM adresse a0_ WHERE a0_.rue_id =?和a0_.id NOT IN(SELECT a1_.id FROM 住址a1_,邊b2_)

我該如何解決呢?

+0

我建議你看看Mawcel的答案,以瞭解你如何構建你的查詢。嘗試將其查詢與來自doctrine文檔的'notIn()'條件混合:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html。 –

回答

-1

在$ QB2我加入identiy這樣

一個一對多的關係
$qb2 = $this->createQueryBuilder('ad') 
      ->from('SBC\BienBundle\Entity\Bien', 'bi') 
      ->select('IDENTITY(bi.address)'); 

但我不知道是什麼意思

1

看起來你的整體要求是不對的,你應該使用一個加入由街查詢您的財產共有制,如果邊有住址

$qb = $this 
    ->createQueryBuilder('b') 
    ->select('b.id') 
    ->from('BienBundle:Bien b') 
    ->leftJoin('b.addresses' 'a') 
    ->where('a.rue = :rue') 
    ->setParameter('rue', $rue) 
    ->getQuery() 
    ->getResult() 
; 
相關問題