【问题标题】:Doctrine 2 - Get total when using limit via repositoryDoctrine 2 - 通过存储库使用限制时获取总数
【发布时间】:2016-05-04 14:46:14
【问题描述】:

我是 Doctrine 的新手,在 @987654323 中使用带有 Criteria 的限制(通过 setMaxResults 函数)时,我找不到获得 total 个结果的方法@方法。

在我的存储库(不是 EntityRepository 的 extend)中,我使用以下代码(我知道这不是最佳代码,它只是用于学习 Doctrine):

public function getAll($query = null) {
    if ($query instanceof Criteria) {
        $users = $this->em->getRepository('App\Entities\User')->matching($query)->toArray();
    } else {
        $users = $this->em->getRepository('App\Entities\User')->findAll();
    }
    return $users;
}

现在假设标准是这样定义的:

$query = Criteria::create();
$query->where(Criteria::expr()->contains('username', 'ron'));
$query->setMaxResults(10);

实际上有超过 10 个用户匹配。

如何获取符合条件的用户总数?

【问题讨论】:

    标签: php doctrine-orm doctrine limit


    【解决方案1】:

    如果您将maxResults 设置为 10,您将获得 10 个结果;)。

    您为什么不致电getAll() 获取所有结果并稍后应用MaxResults

    //search for Ron's
    $query = Criteria::create();
    $query->where(Criteria::expr()->contains('username', 'ron'));
    
    //check how many Ron's your database can find
    $count = $repo->getAll($query)->count();
    
    //get the first 10 records
    $query->setMaxResults(10);
    $users = $repo->getAll($query);
    

    【讨论】:

    • 我尝试在单个查询中执行此操作,但我猜 Doctrine 作为第一个查询(无限制)执行的 COUNT(*) 速度足够快,不会产生很大的“开销”影响。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多