MikeZange / laravel-entity-base-repositories
Laravel Eloquent ORM 的简单基础仓库,此包抽象了基础 Model 函数并添加了缓存装饰器
Requires
- php: ^7.1.3
This package is auto-updated.
Last update: 2024-09-05 20:32:43 UTC
README
Laravel Eloquent ORM 的简单基础仓库,此包抽象了基础 Model 函数并添加了缓存装饰器。
如果您已选择支持标签的缓存方法并在配置中启用了缓存,则缓存将自动处理。
要求
PHP ^7.1.3
安装
-
如常:备份您的数据库 - 我不负责任何数据丢失
-
通过 Composer 安装包
composer require mike-zange/laravel-entity-base-repositories
-
服务提供器在 Laravel >= 5.5 中自动加载
-
发布配置文件
repository.php
php artisan vendor:publish --provider="MikeZange\LaravelEntityRepositories\Providers\RepositoryServiceProvider"
-
您可以使用以下命令创建仓库
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
-
在
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, ] ],
-
您现在可以在控制器中为您的仓库进行类型提示
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; } }
手动创建仓库
-
为您的仓库创建一个合约
namespace App\Repositories; use MikeZange\LaravelEntityRepositories\Repositories\BaseRepository; interface UserRepository extends BaseRepository { }
-
为您的模型创建一个 Eloquent 仓库
namespace App\Repositories\Eloquent; use App\Repositories\UserRepository; use MikeZange\LaravelEntityRepositories\Repositories\Eloquent\EloquentBaseRepository; class EloquentUserRepository extends EloquentBaseRepository implements UserRepository { }
-
为您的仓库创建一个缓存装饰器
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; } }
-
在
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, ] ],
-
您现在可以在控制器中为您的仓库进行类型提示
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; } }