如何让Laravel分页$couriers->links()保留分页条数设置?
问题
如何让Laravel分页方法$couriers->links()记住分页条数设置?当前切换页码后分页条数总是重置为默认值1,因为$couriers->links()生成的URL仅包含page参数,未携带pagination、sort、order等其他参数。
尝试过使用类内变量,但由于类每次都会重新实例化,变量会重置为初始值。请问是否必须手动编写分页链接?
相关代码
class CourierController extends Controller { public function index(Request $request){ // Get the sort option from the request, default to sorting by 'id' $sortField = $request->input('sort', 'id'); $sortOrder = $request->input('order', 'asc'); // 'asc' or 'desc' $pagination = $request->input('pagination', 1); // Fetch and sort the couriers $couriers = Courier::orderBy($sortField, $sortOrder)->paginate($pagination); return view("main", compact("couriers", 'sortField', 'sortOrder', 'pagination')); } public function sort(Request $request) { $sortField = $request->input('sort', 'id'); $sortOrder = $request->input('order', 'asc'); $pagination = $request->input('pagination', 1); $couriers = Courier::orderBy($sortField, $sortOrder)->paginate($pagination); return response()->json($couriers); } }
解决方案
不需要手动编写分页链接,Laravel自带的分页实例提供了appends()方法,能轻松携带额外参数,解决参数丢失问题:
方式一:指定需要保留的参数
在控制器中,给分页查询结果追加要保留的参数:
$couriers = Courier::orderBy($sortField, $sortOrder)->paginate($pagination) ->appends([ 'sort' => $sortField, 'order' => $sortOrder, 'pagination' => $pagination ]);
这样$couriers->links()生成的每个分页URL都会自动带上sort、order、pagination参数,切换页码时这些设置就不会丢失。
方式二:自动保留所有请求参数
如果需要保留当前请求中除page外的所有参数(比如后续新增其他筛选条件时),可以直接用request()->except('page')批量追加:
$couriers = Courier::orderBy($sortField, $sortOrder)->paginate($pagination) ->appends(request()->except('page'));
这种方式更灵活,不用每次新增参数都修改代码。
前端补充(可选)
如果分页条数是通过前端下拉框或表单切换的,记得在表单里带上当前的sort和order参数,比如添加隐藏输入框:
<input type="hidden" name="sort" value="{{ $sortField }}"> <input type="hidden" name="order" value="{{ $sortOrder }}">
这样切换分页条数时,排序设置也能一起提交,不会被重置。
内容的提问来源于stack exchange,提问作者Азимия
相关产品推荐
相关产品推荐

