教义左边加入限制

时间:2012-08-20 11:42:56

标签: doctrine left-join limit

我提出了使用leftJoin获取所有品牌和所有品牌商品的请求:

$brands = Doctrine_Query::create()
->from('Brand b')
->leftJoin('b.Item i')
->fetchArray();

但我想每个品牌只能获得10件物品,我怎样才能限制物品leftJoin?

2 个答案:

答案 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)')

我没有对此进行测试,但它应该有效。