0

Symfony2 でクエリ ビルダーを使用して、データベースからいくつかのレコードを取得しようとしています。SQL で通常のクエリを実行すると、正しい結果が返されます。クエリは

SELECT pg.name, pg.description
FROM pm_patentgroups pg
LEFT JOIN pm_portfolios pp ON pp.id = pg.portfolio_id

Symfony2 で Doctorine クエリ ビルダーを使用して、正確なクエリを使用したいと考えています。私がこれまでに試したことは、

 $repository = $this->getDoctrine()
        ->getRepository('MunichInnovationGroupBundle:PmPatentgroups');
        $query = $repository->createQueryBuilder('pg')
        ->from('pm_patentgroups', 'pg')
        ->leftJoin('pg','pm_portfolios','pp','pp.id = pg.portfolio_id')
        ->getQuery();
        $portfolio_groups = $query->getResult();

しかし、次のエラーが表示されます:

警告: Doctrine\ORM\EntityRepository::createQueryBuilder() の引数 1 がありません

Symfony2 と Doctorine は初めてです。ここで何がうまくいかないのか教えてください。

ありがとう

4

2 に答える 2

4

createQueryBuilder を使用するときにエイリアスがありません。リポジトリがあるので、 from 部分を削除して使用できます

$query = $repository->createQueryBuilder('pg')
于 2012-06-01T20:20:15.013 に答える
2

何かのようなもの:

$qb = $this->getDoctrine()->createQueryBuilder();

$qb->addSelect('pm_patentgroups');
$qb->addSelect('pm_portfolios');

$qb->from('MunichInnovationGroupBundle:PmPatentgroups','pm_patentgroups');
$qb->leftJoin('pm_patentgroups.pm_portfolios','pm_portfolios');

これは、2 つのエンティティが適切に関連付けられていることを前提としています。

D2 マニュアルにたくさんの例があります。クエリ ビルダーは、SQL ではなくオブジェクトを操作することに注意してください。

ところで、エラー メッセージは、エンティティ リポジトリ (エンティティ マネージャではなく) がエイリアスを必要とするという事実から来ています。

于 2012-06-01T20:01:57.473 に答える