我提出了这个请求,以获取所有品牌和这些品牌的所有物品 leftJoin :
$brands = Doctrine_Query::create()
->from('Brand b')
->leftJoin('b.Item i')
->fetchArray();
但是我只想获得每个品牌的 10 件商品,我该如何限制 Item leftJoin ?
我知道已经很晚了,但这实际上在我的谷歌搜索中得分为 nr 1 并且没有得到答复: 使用 fetch-joined 集合限制学说查询?建议使用 Paginaror 对象
这是一个例子:
我的代码有包含 rss 链接的源和来自 rss 提要的文章的文章。所以在这个例子中,我会得到一个 Source 和它的所有文章。
// 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());
您必须像这样使用子查询:
->leftJoin('b.Item i WITH i.id IN (SELECT i2.id FROM Item i2 WHERE i2.brand_id=b.id LIMIT 10)')
我没有对此进行测试,但它应该可以工作。