我提出了使用leftJoin获取所有品牌和所有品牌商品的请求:
$brands = Doctrine_Query::create()
->from('Brand b')
->leftJoin('b.Item i')
->fetchArray();
但我想每个品牌只能获得10件物品,我怎样才能限制物品leftJoin?
答案 0 :(得分:1)
我知道它已经晚了,但实际上我的谷歌搜索得分为1,并且未得到答复: Limiting a doctrine query with a fetch-joined collection?建议使用Paginaror对象
以下是一个例子:
我的代码包含的源包含rss链接和文章,这些文章来自rss Feed。因此,在这个例子中,我将获得一个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());
答案 1 :(得分:0)
你必须使用这样的子查询:
->leftJoin('b.Item i WITH i.id IN (SELECT i2.id FROM Item i2 WHERE i2.brand_id=b.id LIMIT 10)')
我没有对此进行测试,但它应该有效。