2

これは私が持っている現在のクエリであり、正常に動作します:

$q = $this->_em->createQuery("SELECT s FROM app\models\Sub s 
                              LEFT JOIN s.case c
                              WHERE s.type LIKE '%$type'
                              AND c.id = '$id'");


foreach ($q->getResult() as $row) {
   $results[$row->getId()] = $row;
}

これを QueryBuilder API 構造に変換したいのですが、これはこれまでのところですが、正しく機能していません。(そして、上記と同じ形式の結果が必要です)。

 $q = $this->_em->createQueryBuilder();

 $q->add('select', 's')
   ->add('from', 'app\models\Sub s')
   ->add('leftJoin', 's.case c')
   ->add('where', 's.type LIKE :type')
   ->add('where', 'c.id = :case');
   ->setParameter('type', "%$type");
   ->setParameter('case', $id);

繰り返しますが、これは適切に機能しておらず、上記と同じ形式で結果を取得する方法がわかりません。ありがとう!

4

1 に答える 1

1

閉じますが、葉巻はありません。正しい WHERE 句を作成するには、Doctrine に付属する Expr クラスの使用方法を学ぶ必要があります。

http://www.doctrine-project.org/docs/orm/2.1/en/reference/query-builder.html#expr-classes

あなたが提供した例では、実際には次のようなものを目指しています(テストされていません):

$q->add('select', 's')
  ->add('from', 'app\model\Sub s')
  ->add('leftJoin', 's.case c')
  ->add('where', $q->expr()->andX($q->expr()->like('s.type', ':type'), $q->expr()->eq('case', ':case')))
  ->setParameter('type', "%$type")
  ->setParameter('case', $id);

WHERE 句が複雑になるにつれて、式のネストも複雑になります。

于 2011-12-13T18:14:44.467 に答える