joelbutcher / eloquent-repositories
用于Laravel Eloquent模型的存储库模式实现。
支持包维护!
joelbutcher
paypal.me/joelbutcher
Requires
- php: ^8.0.2
- illuminate/console: ^9.0
- illuminate/database: ^9.0
- illuminate/support: ^9.0
Requires (Dev)
- laravel/pint: ^1.2
- mockery/mockery: ^1.5
- nunomaduro/larastan: ^2.2
- orchestra/testbench: ^7.7
- pestphp/pest: ^1.22
This package is auto-updated.
Last update: 2024-09-15 01:32:45 UTC
README
Eloquent Repositories 是一个轻量级解决方案,用于将存储库模式(基于Eloquent构建)添加到您的Laravel项目中。
要求
此包需要Laravel 8或更高版本和PHP 7.4或更高版本。
入门
使用Composer将此包添加到您的项目中
composer require joelbutcher/eloquent-repositories
创建存储库
创建存储库最快的方法是使用make:repository
命令。此命令接受您要创建的存储库的名称
php artisan make:repository PostRepository
此命令将在您的Laravel应用程序的app/Repositories
目录中创建一个新的存储库。
您还可以选择性地附加--model=
选项来指定应该为给定的模型创建存储库。(在运行此命令之前需要创建模型。)
php artisan make:repository PostRepository --model=Post php artisan make:repository PostRepository -m Post
您还可以使用test
或pest
选项为存储库创建PHPUnit或Pest测试文件。
手动创建
当然,您也可以手动创建存储库
use App\Models\Post; use JoelButcher\EloquentRepositories\Repository; use Illuminate\Database\Eloquent\Model; class PostRepository extends Repository { protected static function model(): string { return Post::class; } public function firstForSlug(string $slug): ?Model { return $this->where('slug', '=', $slug)->first(); } }
使用存储库
要使用存储库,您可以将它“注入”到任何需要它的类中
class UpdatePost { public function __construct( private readonly PostValidator $validator, private readonly PostRepository $repository ) { } public function update(array $data): void { $this->validator->validate($data); $this->repository->upsert($data, ['slug'], ['slug']); } }
接口绑定
您可以选择将存储库绑定到接口,您可以通过在存储库中实现此接口,然后将具体的存储库实现绑定到服务容器来完成此操作
class UserRepository extends Repository implements UserRepositoryContract { // } class MyServiceProvider extends ServiceProvider { public function boot(): { $this->app->bind(UserRepositoryContract::class, UserRepository::::class) } }
贡献
感谢您考虑为Eloquent Repositories做出贡献!您可以在这里阅读贡献指南。
行为准则
为了确保社区对所有成员都友好,请查阅并遵守行为准则。
许可
本项目是开源软件,根据MIT许可证授权。