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

如何在Laravel Repository中获取筛选后的数据?

Laravel书籍列表筛选与分页实现方案

一、修改BookController添加条件筛选逻辑

要在分页前加入作者筛选,先从请求中获取前端传递的参数,再通过仓库构建带条件的查询:

public function index(Request $request)
{
    // 获取作者筛选参数,默认空值
    $authorFilter = $request->get('author', '');
    
    // 初始化查询构造器
    $bookQuery = $this->bookRepository->query();
    
    // 如果有筛选参数,添加Like条件
    if ($authorFilter) {
        $bookQuery->where('author', 'like', "%{$authorFilter}%");
    }
    
    // 执行分页,保留原有分页配置
    $books = $bookQuery->paginate(25, ['*'], 'idBook');

    // 将筛选参数回传给视图,维持输入状态
    return view('book.index')
        ->with('books', $books)
        ->with('authorFilter', $authorFilter);
}

如果你的BookRepository没有query()方法,直接通过模型实例构建查询:

$bookQuery = $this->bookRepository->model()->newQuery();

二、在index.blade.php添加筛选表单与分页参数保留

在视图中添加筛选表单,并确保分页时携带筛选参数:

<!-- 筛选表单 -->
<form method="GET" action="{{ route('book.index') }}">
    <div>
        <label>作者:</label>
        <input type="text" name="author" value="{{ $authorFilter }}">
        <button type="submit">筛选</button>
        <a href="{{ route('book.index') }}">重置</a>
    </div>
</form>

<!-- 书籍列表 -->
@foreach($books as $book)
    <!-- 此处为原有书籍展示代码 -->
@endforeach

<!-- 分页组件,携带筛选参数 -->
{{ $books->appends(['author' => $authorFilter])->links() }}

核心要点

  • 使用GET方法提交表单,筛选参数会被附加到URL,刷新或分页时不会丢失
  • appends()方法用于分页链接携带筛选参数,避免切换页码后筛选条件失效
  • 回传$authorFilter到视图,让输入框保留用户之前的筛选内容

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:12:45