MikeZange/laravel-entity-base-repositories

Laravel Eloquent ORM 的简单基础仓库,此包抽象了基础 Model 函数并添加了缓存装饰器

0.5.0 2019-03-05 00:18 UTC

This package is auto-updated.

Last update: 2024-09-05 20:32:43 UTC


README

Laravel Eloquent ORM 的简单基础仓库,此包抽象了基础 Model 函数并添加了缓存装饰器。

如果您已选择支持标签的缓存方法并在配置中启用了缓存,则缓存将自动处理。

要求

  • PHP ^7.1.3

安装

  1. 如常:备份您的数据库 - 我不负责任何数据丢失

  2. 通过 Composer 安装包

    composer require mike-zange/laravel-entity-base-repositories

  3. 服务提供器在 Laravel >= 5.5 中自动加载

  4. 发布配置文件 repository.php

    php artisan vendor:publish --provider="MikeZange\LaravelEntityRepositories\Providers\RepositoryServiceProvider"

  5. 您可以使用以下命令创建仓库

    php artisan generate:repository {entity}

    这将为实体创建合约、Eloquent 和缓存装饰器。

    app/Repositories/UserRepository.php app/Repositories/Eloquent/EloquentUserRepository.php app/Repositories/Cache/CacheUserRepository.php

    使用以下方式自定义生成的文件

    更改命名空间,默认: "App\Repositories"

    php artisan generate:repository {entity} --s App\\New\\Namespace

    更改仓库名称,默认: "{entity}Repository"

    php artisan generate:repository {entity} --r NewRepoName

    将生成: NewRepoName

    app/Repositories/NewRepoName.php app/Repositories/Eloquent/EloquentNewRepoName.php app/Repositories/Cache/CacheNewRepoName.php

  6. config/repository.php 中根据您的需求编辑配置,默认值应该适用于大多数用途,但您需要指定您的仓库,例如

    'repositories' => [
         [
             'entity' => \App\Entities\User::class,
             'contract' => App\Repositories\UserRepository::class,
             'eloquent_repository' => App\Repositories\Eloquent\EloquentUserRepository::class,
             'cache_decorator' => App\Repositories\Cache\CacheUserDecorator::class,
         ]
     ],
    
  7. 您现在可以在控制器中为您的仓库进行类型提示

    class UserController extends Controller
    {
        /**
         * @var UserRepository
         */
        private $userRepository;
    
        /**
         * Create a new controller instance.
         *
         * @param UserRepository $userRepository
         */
        public function __construct(UserRepository $userRepository)
        {
            $this->userRepository = $userRepository;
        }
        
        public function index(Request $request)
        {
            $users = $this->userRepository->all();
            return $users;
        }
    }
    

手动创建仓库

  1. 为您的仓库创建一个合约

    namespace App\Repositories;
    
    use MikeZange\LaravelEntityRepositories\Repositories\BaseRepository;
    
    interface UserRepository extends BaseRepository
    {
    }
    
  2. 为您的模型创建一个 Eloquent 仓库

    namespace App\Repositories\Eloquent;
    
    use App\Repositories\UserRepository;
    use MikeZange\LaravelEntityRepositories\Repositories\Eloquent\EloquentBaseRepository;
    
    class EloquentUserRepository extends EloquentBaseRepository implements UserRepository
    {
    }
    
  3. 为您的仓库创建一个缓存装饰器

    namespace App\Repositories\Cache;
    
    use App\Repositories\UserRepository;
    use MikeZange\LaravelEntityRepositories\Repositories\Cache\CacheBaseDecorator;
    
    class CacheUserDecorator extends CacheBaseDecorator implements UserRepository
    {
        public function __construct(UserRepository $repository)
        {
            parent::__construct();
            $this->entityName = 'user';
            $this->repository = $repository;
        }
    }
    
  4. config/repository.php 中根据您的需求编辑配置,默认值应该适用于大多数用途,但您需要指定您的仓库,例如

    'repositories' => [
         [
             'entity' => \App\Entities\User::class,
             'contract' => App\Repositories\UserRepository::class,
             'eloquent_repository' => App\Repositories\Eloquent\EloquentUserRepository::class,
             'cache_decorator' => App\Repositories\Cache\CacheUserDecorator::class,
         ]
     ],
    
  5. 您现在可以在控制器中为您的仓库进行类型提示

    class UserController extends Controller
    {
        /**
         * @var UserRepository
         */
        private $userRepository;
    
        /**
         * Create a new controller instance.
         *
         * @param UserRepository $userRepository
         */
        public function __construct(UserRepository $userRepository)
        {
            $this->userRepository = $userRepository;
        }
        
        public function index(Request $request)
        {
            $users = $this->userRepository->all();
            return $users;
        }
    }