是否可以在 paginate() 函数中使用“限制”参数?
我正在尝试这个:
$users->where(...)->limit(50)->paginate($page)
...现在,如果我在数据库中有 100 个用户,那么 paginate 函数的响应将是全部 100 个用户而不是 50 个(或使用限制参数定义的用户数)。
所以,我的问题是:当我使用分页功能时,是否可以实现限制参数?
是否可以在 paginate() 函数中使用“限制”参数?
我正在尝试这个:
$users->where(...)->limit(50)->paginate($page)
...现在,如果我在数据库中有 100 个用户,那么 paginate 函数的响应将是全部 100 个用户而不是 50 个(或使用限制参数定义的用户数)。
所以,我的问题是:当我使用分页功能时,是否可以实现限制参数?
不,使用分页时无法限制查询。
查询分页使用skip()
和limit()
内部来选择正确的记录。任何limit()
应用于查询的内容都将被分页要求覆盖。
如果您想对结果子集进行分页,则需要先获取结果,然后为这些结果手动创建分页器。
如果你想在 Laravel 查询中使用限制,那么我们将使用偏移量进行分页。
第一次
$users->where(...)->limit(10)->offset(0);
下次点击时
$users->where(...)->limit(10)->offset(10);
更多下一次点击
$users->where(...)->limit(10)->offset(20);
正如@patricus 所说,这是不可能的,但你可以四处走走以获得你想要的东西,它会是这样的:
$users=User::where(...)->limit(50);
$users=$user->paginate(10);
这个技巧对我有用,但经过一番思考,我意识到我真的不需要应用这个解决方案,因为分页已经限制了查询。您所需要的只是满足您需求的正确查询。
使用 LengthAwarePaginator。
例子:
$total = 50;
$perPage = 10;
$users = $users->where(...)->paginate($page);
$users = new LengthAwarePaginator(
$users->toArray()['data'],
$users->total() < $total ? $users->total() : $total,
$perPage,
$page
);
默认情况下,当前页面由 HTTP 请求上的页面查询字符串参数的值检测。当然,这个值是 Laravel 自动检测到的,也会自动插入到分页器生成的链接中。
所以,通知页面和分页,一切都应该没问题。