我的库中存在一个问题,一个自定义查询问题。我在包括高级帐户在内的网站上工作。 使用这些帐户,您可以获得不限制列表成员结果,例如。如果您没有高级帐户,则结果列表限制为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 ...)
如果有人可以帮助我...抱歉我的英语!提前致谢
答案 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);