如何在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
相关产品推荐
相关产品推荐

