surazdott / laravel-repository
Laravel 仓库设计模式,包含服务和接口。
Requires
- php: ^8.1
Requires (Dev)
- mockery/mockery: ^1.4.4
- phpunit/phpunit: ^10.1
This package is auto-updated.
Last update: 2024-09-26 12:22:48 UTC
README
介绍
Laravel 仓库设计模式包提供了一种概述,用于Laravel服务和仓库结构中使用的设计模式。此模式的主要目标是分离关注点、改进代码组织并提高可维护性。
仓库模式组件
-
服务层:此层包含应用程序的业务逻辑。它将应用程序的功能从控制器中抽象出来,促进更好的关注点分离。
-
仓库层:仓库作为与数据库交互的接口。它从服务层抽象数据库操作,使得在不影响业务逻辑的情况下轻松切换到不同的数据源变得容易。
开始使用
需要 PHP 8.1+
首先,使用Composer包管理器安装包
composer require surazdott/laravel-repository
生成类
您也可以单独生成仓库类,或使用选项生成。
基本命令
// Generate repository class php artisan make:repository UserRepository // Generate repository with service php artisan make:repository UserRepository --service // Generate repository with interface php artisan make:repository UserRepository --interface // Generate repository with interface and service php artisan make:repository UserRepository --all // Generate service class php artisan make:repository-service UserService // Generate interface class php artisan make:repository-interface UserRepositoryInterface
要查找帮助和选项
php artisan make:repository --help
基本用法
随着软件开发行业的不断演变,人们越来越关注提高代码的可维护性,这导致了设计模式的修改。
基类
use SurazDott\Repositories\BaseRepository;
use SurazDott\Services\BaseService;
让我们看看一个简单的例子
仓库接口
首先创建您的初始仓库接口。
php artsian make:repository-interface UserRepositoryInterface
App\Repositories\Interfaces\UserRepositoryInterface.php
<?php namespace App\Repositories\Interfaces; use Illuminate\Database\Eloquent\Model; interface UserRepositoryInterface { /** * Find database record by id. * * @param mixed $id */ public function findById(string $id): ?Model; }
仓库类
使用以下命令创建您的第一个仓库类。
php artisan make:repository UserRepository
App\Repositories\UserRepository.php
<?php namespace App\Repositories; use App\Models\User; use App\Repositories\Interfaces\UserRepositoryInterface; use Illuminate\Database\Eloquent\Model; use SurazDott\Repositories\BaseRepository; class UserRepository extends BaseRepository implements UserRepositoryInterface { /** * Create new repository instance. */ public function __construct( protected User $model ) { } /** * Find database record by id. */ public function findById(string $id): ?Model { return $this->model->find($id); } }
服务类
在接口和仓库之后,使用以下命令创建服务类。
php artisan make:repository-service UserService
App\Service\UserService.php
<?php namespace App\Services; use App\Repositories\UserRepository; use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Model; use SurazDott\Services\BaseService; class UserService extends BaseService { /** * Create new service instance. */ public function __construct( protected UserRepository $repository ) { } /** * Find database record by id. * * @param string $id */ public function findById($id): ?Model { return $this->repository->findById($id); } }
控制器类
现在创建一个Laravel控制器文件,并如下使用服务类。
php artsian make:controller UserController
App\Http\Controllers\UserController.php
<?php namespace App\Http\Controllers; use App\Services\UserService; use Illuminate\View\View; use Illuminate\Http\Request; class UserController extends Controller { /** * Create a new controller instance. */ public function __construct( private UserService $users ) { } /** * Display a listing of the resource. */ public function edit(Request $request): View { $data['user'] = $this->users->findById($id); return view('admin.users.edit', $data); } }
Eloquent 查询构建器
如果您想运行Eloquent查询,您可以调用query()
函数来获取Eloquent构建器。例如:$this->users->query()->latest()->get();
<?php namespace App\Http\Controllers; use App\Services\UserService; use Illuminate\View\View; use Illuminate\Http\Request; class UserController extends Controller { /** * Create a new controller instance. */ public function __construct( private UserService $users ) { } /** * Display a listing of the resource. */ public function index(): View { // get all users $data['users'] = $this->users->query()->latest()->get(); // get active users $data['activeUsers'] = $this->users->query()->where('status', true)->get(); return view('admin.users.index', $data); } /** * Show the form for editing the specified resource. */ public function edit(Request $request): View { $data['user'] = $this->users->findById($id); return view('admin.users.edit', $data); } }
方法
查看以下列表中的一些方法。
create()
要将新记录插入到数据库中,您应使用create
方法。
$data = $request->validated(); $this->userService->create(array $data);
find()
要从数据库记录中获取第一条记录,您应使用find
方法。
$this->userService->find(string $id);
first()
要从数据库记录中获取第一条记录,您应使用first
方法。
$this->userService->first(string $id);
findOrFail()
要从数据库记录中查找特定记录,您应使用findOrFail
方法。
$this->userService->findOrFail(string $id);
update()
要从数据库记录中查找特定记录,您应使用update
方法。
$data = $request->validated(); $this->userService->update(string $id, array $data);
delete()
要从数据库中删除记录,您应使用delete
方法并传递整数、数组或字符串。
$this->userService->delete(mixed $ids);
query()
您可以使用query
方法构建数据库构建器,并运行Eloquent查询和模型作用域。
$this->userService->query();
贡献
如果您发现任何问题或对改进有建议,请随时打开问题或创建pull请求。欢迎贡献!
许可证
此包是开源软件,许可协议为MIT许可证。