joelbutcher / eloquent-repositories

用于Laravel Eloquent模型的存储库模式实现。

v1.0.0 2022-09-14 21:01 UTC

This package is auto-updated.

Last update: 2024-09-15 01:32:45 UTC


README

Build Status Total Downloads Latest Stable Version License

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

您还可以使用testpest选项为存储库创建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许可证授权。