如何在 Laravel 存储库中获取过滤后的数据?

问题描述 投票:0回答:1

我必须修改用 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..

php laravel eloquent
1个回答
0
投票

这是 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 中的页面查询参数自动确定当前页面。

© www.soinside.com 2019 - 2024. All rights reserved.