限制Doctrine FindAll方法的行

时间:2011-07-28 13:40:51

标签: zend-framework doctrine

我正在尝试限制从doctrine的FindAll方法返回的行。

public function getActiveUsersByPoint($limit = 100){
    $users = $this->userRepository->findAll();

    return $users;
}

此代码有效,但我无法使用$ limit变量来限制结果。我怎么能这样做?

3 个答案:

答案 0 :(得分:56)

EntityRepository#findBy()方法还接受排序,限制和偏移作为第二到第四参数:

$tenUsers = $em->getRepository('MyProject\Domain\User')
               ->findBy(
                   array('age' => 20),        // $where 
                   array('name' => 'ASC'),    // $orderBy
                   10,                        // $limit
                   0                          // $offset
                 );

答案 1 :(得分:5)

为了找到所有结果,你应该将一个空数组传递给findBy方法,我认为这是你假装的:

$users= $em->userRepository->findBy(
            array(),
            array('id' => 'DESC'),
            10,
            0
        );

第一个参数是一个空数组,它相当于findAll(),然后是顺序(我把id作为样本),然后是限制,最后是偏移量。

答案 2 :(得分:1)

如果您的问题是针对Doctrine 1.x,则FindAll的意思是“全部查找”。要限制结果,请使用DQL:

$q = Doctrine_Query::create()
  ->from('UserRepository')
  ->limit($limit);
$users = $q->execute();