2016-05-26 8 views
2

私はsymfonyで2つのテーブルをManyToOne双方向関係で結合しています。記事と日付。Symfony/Doctrine - このコードをどうやって象徴することができますか?

私はa.id:4以外のすべての記事を持っています。そのうちの1つが条件に応答しないためです。

解決策が見つかりましたが、どうすればそれを簡約化できますか?私は最適化されていないことを知っている。そして私はしたいと思います。私のテーブルで

(日付)私が持っている:

+---------------------------- 
| id | a.id | OK OR NOT ? 
+---------------------------- 
| 1 | 4  |  OK 
| 2 | 4  |  OK 
| 3 | 6  |  OK 
| 4 | 5  |  OK 
| 5 | 4  | **NOTOK** 
---------------------------- 

    $qb = $this->createQueryBuilder('a'); 
    $allIndispo = $qb 
     ->select('a.id') 
     ->leftJoin('a.dates','d') 
     ->where('**NOTOK**') 
     ->orderBy('a.id', 'ASC') 
     ->getQuery() 
     ->getResult(); 

    $allIndispoId = array(); 
    foreach ($allIndispo as $key => $value) { 
     foreach ($allIndispo[$key] as $key2 => $value2) { 
      $allIndispoId[] = $value2; 
     } 
    } 

    $allDispo = $this->createQueryBuilder('a') 
     ->select('a') 
     ->where($qb->expr()->notIn('a.id', "'".implode($allIndispoId, "', '")."'")) 
     ->getQuery() 
     ->getResult(); 

    return $allDispo; 

答えて

2

てみてください一例として、第二のためのサブクエリとして最初のクエリを使用するには:

$qb = $this->createQueryBuilder('a2'); //We need a different alias here 
    $allIndispo = $qb 
     ->select('a2.id') 
     ->leftJoin('a2.dates','d') 
     ->where('**NOTOK**') // so take care to change the table alias here also 
     ->orderBy('a2.id', 'ASC'); 


$allDispo = $this->createQueryBuilder('a') 
    ->select('a') 
    ->where($qb->expr()->notIn('a.id', $subQuery->getDQL())) 
    ->getQuery() 
    ->getResult(); 

return $allDispo; 

・ホープ、このヘルプ

+0

はい、それは働き、多くを助けます。ありがとうございました :) – mBbkr

関連する問題