Laravel分页切换页面时搜索条件失效问题排查
问题原因
分页切换后筛选条件丢失,是因为Laravel分页生成的链接默认只携带page分页参数,你的搜索参数(name/from/to/price/folder)不会自动附加到分页请求中,导致后端无法获取筛选条件,自然不会继续过滤数据。
解决方案
1. 给分页实例附加搜索参数
在后端生成分页结果时,使用appends()方法将请求中的搜索参数追加到分页链接里,确保切换分页时参数不丢失。
修改代码中的分页逻辑:
// 替换原有的分页代码 $transaction = new FotoCollection( $transaction->paginate(150)->appends($request->only(['name', 'from', 'to', 'price', 'folder'])) );
$request->only()可以精准指定需要携带的参数,避免无关参数混入;如果想携带所有请求参数,也可以用$request->all()。
2. 优化冗余排序代码
你一开始已经调用了orderByDesc('id'),后续每个筛选条件里重复的orderBy('id', 'desc')完全多余,可以删除,简化后的完整代码:
public function fotoTrxSearch(Request $request){ $transaction = Foto::orderByDesc('id'); if($request->filled('name')){ $transaction->where('name', 'like', "%{$request->name}%"); } if($request->filled('from') && $request->filled('to')){ $transaction->whereBetween('date', [$request->from, $request->to]); } if($request->filled('price')){ $transaction->where('price','like', "%{$request->price}%"); } if($request->filled('folder')){ $transaction->where('folder','like', "%{$request->folder}%"); } $transaction = new FotoCollection( $transaction->paginate(150)->appends($request->only(['name', 'from', 'to', 'price', 'folder'])) ); return Inertia::render('Foto/FotoList',[ 'fotos' => $transaction]); }
原理说明
appends()方法会将指定参数添加到分页组件生成的每个页面链接的查询字符串中,比如?page=2&name=xxx&from=2024-01-01,这样切换分页时,后端能重新获取到所有筛选参数,继续执行带条件的查询。
内容的提问来源于stack exchange,提问作者shinichirou ikebe
相关产品推荐
相关产品推荐

