我必须修改用 Laravel 编写的外部项目。
简而言之,我找到了这个BookController.php
class BookController extends AppBaseController
{
public function __construct(BookRepository $brepo)
{
$this->bookRepository = $brepo;
}
public function index(Request $request)
{
$books = $this->bookRepository->paginate(25, ['*'], 'idBook');
[ ... ]
return view('book.index')
->with('book', $book) ;
}
作为第一步,我想在分页之前在查询中执行 where 过滤器,但是:
$this->bookRepository->query('author','like','%Joe%');
$this->bookRepository->all([ ??? ], $skip, $limit);
$uselessString = $this->bookRepository->model();
似乎无效。
作为最后一步,我想在我的index.blade.php中添加html输入元素,以这种方式,我在$request参数中接收它..
我尝试修改代码,但我以前从未使用过 Laravel/Eloquent..
这是 BookRepository 类的结构,它将按预期工作:
class BookRepository {
protected $queryBuilder;
public function __construct() {
$this->queryBuilder = Book::query(); // Initialize with the Book model query
}
public function query($field, $operator, $value) {
$this->queryBuilder->where($field, $operator, $value);
return $this; // Return self for method chaining
}
public function all(array $columns = ['*'], $skip = 0, $limit = 10) {
return $this->queryBuilder->skip($skip)->take($limit)->get($columns);
}
public function reset() {
$this->queryBuilder = Book::query(); // Reset the query builder
}
}
查询方法返回$this,允许您在需要时链接其他查询方法。 如果您想重新开始,请考虑添加重置方法来清除以前的所有查询条件。
您还可以使用 Laravel 内置的分页方法来自动处理分页,这大大简化了流程。
$limit = 10;
$books = $this->bookRepository->query('author', 'like', '%Joe%')->paginate($limit);
Laravel 根据 URL 中的页面查询参数自动确定当前页面。