4

我提出了这个请求,以获取所有品牌和这些品牌的所有物品 leftJoin :

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

但是我只想获得每个品牌的 10 件商品,我该如何限制 Item leftJoin ?

4

2 回答 2

1

我知道已经很晚了,但这实际上在我的谷歌搜索中得分为 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());
于 2013-05-31T11:26:47.683 回答
1

您必须像这样使用子查询:

->leftJoin('b.Item i WITH i.id IN (SELECT i2.id FROM Item i2 WHERE i2.brand_id=b.id LIMIT 10)')

我没有对此进行测试,但它应该可以工作。

于 2012-08-21T10:55:19.920 回答