Laravel:在Model方法中请求并更改分页值?

gk7wooem  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(79)

在我的laravel应用程序中,我有一个API入口点,在那里我为我的应用程序收集初始数据,例如,我为帖子,标签,用户获得分页结果......
我对所有记录使用paginate:15,但对用户,我想使用paginate:30,因为在我的请求参数中,我有这样的东西:

page=1&paginate=15

字符串
有没有办法将其更改为30在我的控制器方法
初始控制器

$users = $this->userService->getUsersPaginated($request);
$users = $this->vuePaginate($users);


在我的用户模型中:

public function getUsersPaginated($request)
    {
        
        $users = User::
        paginate($request['paginate']);
        

        return $users;
    }

bxgwgixi

bxgwgixi1#

根据 * 用户类型 *,评估是否可以在前端处理分页大小。
无论如何,如果你想在后端处理它,你可以找到一个条件,让你设置分页大小。
举例来说:

if ($currentUser->role == 'final-user')  // or something similar
   $perPage = max (30, $request['paginate']);
else
   $perPage = $request['paginate'];

$users = User::paginate($perPage);

字符串
我还建议您为分页设置一个最小值和一个最大值,以避免前端错误的值导致问题(想象一下,如果您得到一个像1,000,000或-1这样的值)

const DEFAULT_RESULTS_PER_PAGE = 15;
const FINAL_USER_RESULTS_PER_PAGE = 30;
const MAX_RESULTS_PER_PAGE = 100;

/* ... */

public function getUsersPaginated($request)
{
    $perPage = min (max ($request['paginate'] ?: self::DEFAULT_RESULTS_PER_PAGE, 1), self::MAX_RESULTS_PER_PAGE);

    if (/* condition */)
        $perPage = max (self::FINAL_USER_RESULTS_PER_PAGE, $perPage);

    $users = User::paginate($perPage);

    /* ... */


还要注意,分页器的默认请求变量是 per_page

相关问题