You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:35:12