Symfony2 - Doctrine:setMaxResults()不起作用

时间:2016-02-15 14:44:32

标签: php symfony doctrine-orm

我的库中存在一个问题,一个自定义查询问题。我在包括高级帐户在内的网站上工作。 使用这些帐户,您可以获得不限制列表成员结果,例如。如果您没有高级帐户,则结果列表限制为10个结果。

所以这是我的自定义查询:

/**
 * Avec cette fonction on obtient la liste de tous les membres
 * en utilisant une pagination
 * @param int $page
 * @param $limitResultPremium
 * @return Paginator
 */
public function getAllUser($page = 1,$maxResultPerPage = 6,$limitResultPremium = 10) {

    $query = $this->createQueryBuilder('u')
        ->select('u')
        ->where('u.enabled = true')
        ->andWhere('u.dCreated <= '. "'".date("Y-m-d H:i:s", time())."'")
        ->orderBy('u.dCreated')
        ->setMaxResults($limitResultPremium)
    ;

    $query->setFirstResult(($page-1) * $maxResultPerPage)
        ->setMaxResults($maxResultPerPage);


    return new Paginator($query);
}

如您所见,我使用paginator对结果页面进行分页。但是我想使用函数setMaxResults()并且它不起作用。我还有与我的查询相对应的最大结果(在我的情况下,我得到11个结果,我想只得到10 ...)

如果有人可以帮助我...抱歉我的英语!提前致谢

3 个答案:

答案 0 :(得分:2)

您使用->setMaxResults方法两次。 我建议你这样做:

public function getAllUser($page = 1,$maxResultPerPage,$limitResultPremium) {

    $query = $this->createQueryBuilder('u')
        ->select('u')
        ->where('u.enabled = true')
        ->andWhere('u.dCreated <= '. "'".date("Y-m-d H:i:s", time())."'")
        ->orderBy('u.dCreated');

    if ($limitResultPremium) {
        $maxResultPerPage = 10;
    }

    $query->setFirstResult(($page-1) * $maxResultPerPage)
        ->setMaxResults($maxResultPerPage);

    return new Paginator($query);
}

答案 1 :(得分:1)

我猜你在尝试使用$limitResultPremium为已经正常工作的代码添加分页时,最终得到了这段代码。多次调用setMaxResults将导致仅最后一次调用有效。你可能想要的是这样的:

public function getAllUser($page, $maxResultPerPage, $limitResultPremium) {

    $query = $this->createQueryBuilder('u')
        ->select('u')
        ->where('u.enabled = true')
        ->andWhere('u.dCreated <= '. "'".date("Y-m-d H:i:s", time())."'")
        ->orderBy('u.dCreated');

    if ($limitResultPremium !== null) {
        $pageMax = $limitResultPremium / $maxResultPerPage;
        $page = $page > $pageMax ? $pageMax : $page;
    }

    $query->setFirstResult(($page-1) * $maxResultPerPage)
        ->setMaxResults($maxResultPerPage);


    return new Paginator($query);
}

当用户试图查看超出其允许范围的页面时,他将被发送到允许的最后一页。您也应该在演示文稿中限制页面(不显示高于$pageMax的页面)。

答案 2 :(得分:0)

如果您将使用的最大结果为10,则您不会需要limitResultPremium,也不能在参数中定义pge编号

public function getAllUser($page,$maxResultPerPage = 10) {

$query = $this->createQueryBuilder('u')
    ->select('u')
    ->where('u.enabled = true')
    ->andWhere('u.dCreated <= '. "'".date("Y-m-d H:i:s", time())."'")
    ->orderBy('u.dCreated');



$query->setFirstResult(($page-1) * $maxResultPerPage)
    ->setMaxResults($maxResultPerPage);

return new Paginator($query, true);