クラステーブル継承を作成する抽象クラスを共有する2つのエンティティがあります。抽象クラスのリポジトリを使用してエンティティをクエリし、結果として抽象クラスを拡張するすべてのエンティティを取得できます。
$qb = $this->createQueryBuilder('c')
->where('c.featured = true')
->orderBy('c.sticky', 'DESC')
->addOrderBy('c.weight', 'ASC')
->setFirstResult($offset)
->setMaxResults($limit);
// Returns 8 results, results in 34 queries
サブクラスには他のエンティティとのManyToMany関係が含まれているため、この方法でクエリを実行すると、それらの関係は結合されていないため、追加のクエリが発生します。抽象クラスを拡張し、それらの列を結合するエンティティをどのように照会できますか?左結合を使用して複数のfromステートメントを追加しようとしましたが、クエリが返す結果は予想よりも少なくなりました。そのクエリビルダーは次のようになります。
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(array(
'a', 'artist', 'country',
't', 'artwork', 'user'))
->from('AcmeArtworkBundle:Artwork', 'a')
->from('AcmeTourBundle:Tour', 't')
->leftJoin('a.artist', 'artist')
->leftJoin('a.country', 'country')
->leftJoin('t.artwork', 'artwork')
->leftJoin('t.user', 'user')
->where('a.featured = true')
->andWhere('t.featured = true')
->orderBy('a.sticky', 'DESC')
->addOrderBy('t.sticky', 'DESC')
->addOrderBy('a.weight', 'ASC')
->addOrderBy('t.weight', 'ASC')
->setFirstResult($offset)
->setMaxResults($limit);
// 5 results :-(