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