Symfony2 - Doctrine : setMaxResults() 不起作用


Symfony2 - Doctrine : setMaxResults() doesn't work

我的仓库中有一个关于教义和自定义查询的问题。我在一个包含高级帐户的网站上工作。例如,使用这些帐户,您可以不受列表成员结果的限制。如果您没有高级帐户,则结果列表限制为 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);
}

如您所见,我使用分页器对结果页面进行分页。但是我想setMaxResults()使用该功能,但它不起作用。 我也有与我的查询相对应的最大结果(在我的情况下,我得到 11 个结果,而我只想得到 10 个......

如果有人能帮助我...对不起我的英语!提前致谢

我猜你在尝试将分页添加到已经使用 $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的页面(。

使用 ->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);
}

如果您将使用的最大结果是 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);