Laravel 9搜索分页失效:URL丢失搜索参数的修复方法
修复Laravel 9分页丢失搜索参数的问题
Laravel分页默认仅携带page参数,要保留搜索条件,需手动将查询参数附加到分页链接上,以下是两种实用方案:
方案1:通过appends()附加查询参数
在控制器的分页查询后调用appends(),将当前请求的查询参数(如search)传递进去,让分页链接自动带上这些参数。
控制器代码示例:
public function search(Request $request) { $searchKeyword = $request->input('search'); $products = Product::where(function($query) use ($searchKeyword) { $query->where('name', 'like', "%{$searchKeyword}%") ->orWhere('sku', 'like', "%{$searchKeyword}%") ->orWhere('description', 'like', "%{$searchKeyword}%"); }) ->paginate(15) // 附加所有请求中的查询参数 ->appends($request->query()); return view('products.search', compact('products', 'searchKeyword')); }
若仅需保留search参数,可直接指定:
->appends(['search' => $searchKeyword]);
方案2:用withQueryString()简化操作(Laravel 7+)
Laravel 7及以上版本提供withQueryString()方法,自动将当前请求的所有查询字符串附加到分页链接,写法更简洁:
$products = Product::where(...) ->paginate(15) ->withQueryString();
视图中的分页渲染
只要控制器处理完成,直接使用Laravel自带的分页组件渲染即可,参数会自动包含在链接中:
{{ $products->links() }}
如果是自定义分页结构,需手动拼接search参数:
@if($products->hasPages()) <nav class="pagination"> @foreach($products->getUrlRange(1, $products->lastPage()) as $pageNum => $pageUrl) <a href="{{ $pageUrl }}&search={{ request('search') }}" class="{{ $pageNum === $products->currentPage() ? 'active' : '' }}"> {{ $pageNum }} </a> @endforeach </nav> @endif
处理完成后,分页链接会变为/search?search=test&page=2的形式,分页时能正确保留搜索条件。
内容的提问来源于stack exchange,提问作者Irakli Qiria
相关产品推荐
相关产品推荐

