【发布时间】:2020-03-10 11:12:17
【问题描述】:
我是 Laravel 和 php 的初学者。我的项目中有 Laravel 5.8 我在我的项目中创建存储库亲子关系。 我编写 Repository Base、Interface 和 controller。
我有这个代码:
- 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;
}
}
- 存储库接口:
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());
}
}
- 控制器:
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 中