forecho / laravel-repository
Laravel的基础仓库实现
v1.1.0
2024-03-02 14:26 UTC
Requires
- php: ^8.0
- illuminate/support: ^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.0
README
该Laravel仓库包旨在成为一个通用的Laravel仓库实现。
安装
您可以通过composer安装此包
composer require forecho/laravel-repository
用法
创建一个仓库类
<?php namespace App\Repositories; use App\Models\Post; use Forecho\LaravelRepository\Repository; class PostRepository extends Repository { // Optional public array $partialMatchAttributes = ['title']; // Optional public array $defaultOrder = ['created_at' => 'desc']; // Optional public array $booleanAttributes = ['status']; public string $modelClass = Post::class; // Optional public function boot() { $this->pushCriteria(UserCriteriaCriteria::class); } }
在控制器中使用仓库
<?php namespace App\Http\Controllers; use App\Repositories\PostRepository; use Illuminate\Http\Request; use App\Http\Resources\UserResource; class UserController extends Controller { protected PostRepository $repository; public function __construct(PostRepository $accountRepository) { $this->repository = $accountRepository; } public function index(Request $request, PostRepository $userRepository) { $posts = $this->repository->search($request->all())->paginate(); // $posts = $this->repository->with(['user'])->search($request->all())->paginate(); return response()->json(UserResource::collection($posts); } }
标准
创建一个标准类
<?php namespace App\Criteria; use App\Services\UserService; use Forecho\LaravelRepository\Contracts\CriteriaInterface; use Forecho\LaravelRepository\Contracts\RepositoryInterface; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; class UserCriteriaCriteria implements CriteriaInterface { /** * Apply criteria in query repository * * @param Builder|Model $model * @param RepositoryInterface $repository * @return mixed */ public function apply($model, RepositoryInterface $repository): mixed { return $model->where('user_id', UserService::getUserId()); } }
通过请求获取所有数据,不进行过滤
http://127.0.0.1:8000/api/posts
[ { "id": 1, "title": "title", "content": "content", "status": 0, "created_at": "2021-08-01T07:00:00.000000Z", "updated_at": "2021-08-01T07:00:00.000000Z" }, { "id": 2, "title": "for echo", "content": "content", "status": 1, "created_at": "2021-08-01T07:00:00.000000Z", "updated_at": "2021-08-01T07:00:00.000000Z" } ]
http://127.0.0.1:8000/api/posts?title=for
[ { "id": 2, "title": "for echo", "content": "content", "status": 1, "created_at": "2021-08-01T07:00:00.000000Z", "updated_at": "2021-08-01T07:00:00.000000Z" } ]
http://127.0.0.1:8000/api/posts?status=0
[ { "id": 1, "title": "title", "content": "content", "status": 0, "created_at": "2021-08-01T07:00:00.000000Z", "updated_at": "2021-08-01T07:00:00.000000Z" } ]
http://127.0.0.1:8000/api/posts?title=for&status=0
[]
测试
composer test
变更日志
请参阅变更日志以获取更多关于最近更改的信息。
贡献
请参阅贡献指南以获取详细信息。
安全
如果您发现任何安全相关的问题,请发送电子邮件至caizhenghai@gmail.com,而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。
Laravel Package Boilerplate
此包是使用Laravel Package Boilerplate生成的。