2017-05-08 5 views
-1

私はdqlの問題で数日間働いています。クエリビルダーのDql

私のモデルでは、yは2つのエンティティ(マシンとインスタンス)を持っています。 1対多の関係なので、機械は多くのインスタンスを持つことができ、インスタンスは1台のマシンしか持つことができません。

ここで、いくつかのインスタンスを持つすべてのマシンを取得したいと思います。

$ids = array(...) 
$dql = "select M from AppBundle:Machine M INNER JOIN AppBundle:Instancia I WITH M.id = I.machine WHERE I.software IN (:ids)"; 
$query = $em->createQuery($dql)->setParameter('ids', $ids); 
$maquinas = $query->getResult(); 

が、私はそれが動作するようになっていないよQueryBuilderに翻訳したい場合:通常のDQLでは私はそれがそのように正常に動作し得ます。私はいくつかの方法を試しています:

//First way 
$qb = $this->createQueryBuilder("M") 
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine') 
->where('I.software IN (:ids)') 
->setParameters('ids', $ids);  
$maquinas = $qb->getQuery()->getResult(); 

//Second way 
$qb = $this->createQueryBuilder("x") 
->select('M') 
->from('AppBundle:Machine', 'M') 
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine') 
->where('I.software IN (:ids)') 
->setParameters('ids', $ids);  
$maquinas = $qb->getQuery()->getResult(); 

私のせいは何ですか?

どちらの方がより速く、簡単なdqlかquerybuilderですか?

ありがとうございます!

+0

あなたはすべてのエラーを得ていますか? –

+0

私はこのエラーが表示されます:致命的なエラー:__cloneメソッドが非オブジェクトで呼び出されました – Angel

+0

dql statmentのwhere節を追加することは可能でしょうか? 例えば: $ dql = "AppBundleからMを選択:Maquina M INNER JOIN AppBundle:Instancia I WITH M.id = I.maquina"; $ query = $ em-> createQuery($ dql); $ query-> where( "I.software IN(:ids)"); $ query-> setParameter( 'ids'、$ ids); – Angel

答えて