【问题标题】:Laravel repository pattern - error with relationsLaravel 存储库模式 - 关系错误
【发布时间】:2020-03-10 11:12:17
【问题描述】:

我是 Laravel 和 php 的初学者。我的项目中有 Laravel 5.8 我在我的项目中创建存储库亲子关系。 我编写 Repository Base、Interface 和 controller。

我有这个代码:

  1. BaseRepository:
    abstract class BaseRepository implements RepositoryInterface
    {

        protected $model;

        public function getAll(string $order = 'id', string $by = 'desc')
        {
            return $this->model->orderBy($order, $by)->get()->appends(request()->query());
        }

        public function getAllWithPaginate(string $order = 'id', string $by = 'desc', int $perPage = 1)
        {
            return $this->model->orderBy($order, $by)->paginate($perPage)->appends(request()->query());
        }

        public function with($relations)
        {
            return $this->model->with($relations);
        }

        public function create(array $data)
        {
            return $this->model->create($data);
        }

        public function save(array $data): int
        {
            $model = $this->model->create($data);
            return $model->id;
        }

        public function update(array $data, int $id)
        {
            return $this->model->where("id", "=", $id)->update($data);
        }

        public function delete(int $id)
        {
            return $this->model->destroy($id);
        }

        public function find(int $id, string $order, string $by)
        {
            return $this->model->find($id)->orderBy($order, $by);
        }

        public function findOrFail(int $id, string $order, string $by)
        {
            return $this->model->findOrFail($id)->orderBy($order, $by);
        }

        public function getModel()
        {
            return $this->model;
        }

    }
  1. 存储库接口:
    interface RepositoryInterface
    {
        public function getAll(string $order, string $by);

        public function getAllWithPaginate(string $order, string $by, int $perPage);

        public function create(array $data);

        public function save(array $data);

        public function update(array $data, int $id);

        public function delete(int $id);

        public function find(int $id, string $order, string $by);

        public function findOrFail(int $id, string $order, string $by);

        public function getModel();
    }

3 广告资源库:

    class AdRepository extends BaseRepository
    {

        public function __construct(Ad $model)
        {
            $this->model = $model;
        }

        public function search(string $query, string $order = 'id', string $by = 'desc', int $perPage = 1)
        {
            return $this->model->where('title', 'LIKE', '%' . $query . '%')->orWhere('id', 'LIKE', '%' . $query . '%')->orWhere('content', 'LIKE', '%' . $query . '%')->orderBy($order, $by)->paginate($perPage)->appends(request()->query());
        }
    }
  1. 控制器:
use App\Models\Ad;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repositories\AdRepository;

    public function index(Request $request)
        {
            if($request->input('query') != ""){
                $adsList = $this->repository->with('author')->search($request->input('query'));
            } else{
                $adsList = $this->repository->with('author')->getAllWithPaginate();
            }

            return view('modules.ad.ad_list', ['adsList' => $adsList]);
        }

protected $model;

    public function __construct(AdRepository $repository)
    {
        $this->model = $repository;
    }

运行代码时出现错误:调用未定义的方法 Illuminate\Database\Eloquent\Builder::getAllWithPaginate()

我该如何解决?

请帮帮我。

【问题讨论】:

  • 你能显示你的控制器的__construct吗?
  • 受保护的 $model;公共函数 __construct(AdRepository $repository) { $this->model = $repository; }
  • 请添加use部分
  • 使用应用\模型\广告;使用 Illuminate\Http\Request;使用 App\Http\Controllers\Controller;使用 App\Repositories\AdRepository;
  • 请将其添加到您的问题中 - 不在 cmets 中

标签: php laravel laravel-5


【解决方案1】:

试试

public function with($relations)
{
    $this->model->with($relations);
    return $this;
}

【讨论】:

  • 这个返回:Method Illuminate\Database\Eloquent\Collection::with 不存在。
  • 我已经改变了答案
  • 现在我的代码运行了,但它不是返回值与关系。它只返回值(没有关系)
猜你喜欢
  • 2013-09-19
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2014-03-15
  • 2014-09-19
  • 2015-01-22
  • 2016-12-13
相关资源
最近更新 更多