leftJoin を使用して、すべてのブランドとこれらのブランドのすべてのアイテムを取得するために、この要求を行いました。
$brands = Doctrine_Query::create()
->from('Brand b')
->leftJoin('b.Item i')
->fetchArray();
しかし、各ブランドのアイテムを 10 個だけ取得したいのですが、どうすれば Item leftJoin に制限をかけることができますか?
次のようにサブクエリを使用する必要があります。
->leftJoin('b.Item i WITH i.id IN (SELECT i2.id FROM Item i2 WHERE i2.brand_id=b.id LIMIT 10)')
私はこれをテストしませんでしたが、動作するはずです。
遅いことはわかっていますが、これは実際に私のGoogle検索で1位になり、回答がありません: フェッチ結合されたコレクションで教義クエリを制限していますか? Paginaror オブジェクトの使用を提案
次に例を示します。
私のコードには、RSS リンクを含むソースと、RSS フィードからの記事である記事があります。したがって、この例では、1 つのソースとそのすべての記事を取得します。
// get the articles (latest first) from source 743
$q=$this->getDoctrine()->getManager()
->createQuery('select s, a from MyCompanyRssBundle:Source s
join s.Articles a
where s.id = :id
order by a.id desc')
->setParameter('id',743);
$q->setMaxResults(1); // this limits Articles to be only 1
// when using $q->getResult();
$sources=new Paginator($q, $fetchJoin = true);
$sources=$sources->getIterator();
// $sources=$q->getResult();
var_dump($sources[0]->getArticles());