nathandunn / model-repositories
该软件包的最新版本(v1.1.0)没有可用的许可证信息。
使用Laravel模型轻松创建类似存储库的实体
v1.1.0
2024-03-15 15:16 UTC
Requires
- php: ^8.1
- illuminate/database: ^10.0 || ^11.0
- illuminate/support: ^10.0 || ^11.0
README
封装Eloquent模型,允许它们用作类似存储库的实体。
为什么?
因为从模型“对象”获取集合并不是模型的作用,如果在其他上下文中注入模型并使用它,这会是一种误导。
灵感来自Jack Wagstaffe
安装
您可以通过运行以下命令使用Composer安装该软件包
composer require nathandunn/model-repositories
使用说明
以下是一个Record
模型的示例存储库。它扩展了基本的Repository
类并添加了自定义的forUser
方法。
<?php namespace App\Records; use App\Users\User; use Illuminate\Database\Eloquent\Builder; use NathanDunn\Repositories\Repository; class RecordRepository extends Repository { /** * @param Record $record */ public function __construct(Record $record) { parent::__construct($record); } public function forUser(User $user): Builder { return $this->model->where('user_id', '=', $uuid); } }
您可以在控制器中注入RecordRepository
<?php namespace App\Http\Controllers; use App\Http\Resources\RecordResource; use App\Records\RecordRepository; use Illuminate\Http\Request; class RecordsController extends Controller { protected RecordRepository $recordRepository; public function __construct(RecordRepository $recordRepository) { $this->recordRepository = $recordRepository; } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { $user = $request->user(); $records = $this->recordRepository->getForUser($user); return RecordResource::collection($records); } }