ez-laravel / model-services
简易Laravel模型服务。
v1.0.1
2020-09-10 09:56 UTC
Requires
- illuminate/support: ~8.0
This package is auto-updated.
Last update: 2024-09-10 19:26:36 UTC
README
此包为基于模型的服务的默认服务功能提供支持。我倾向于将其用作一种仓库类。
我也遇到了在Vue组件中使用(深层)集合时JSON无法正确渲染的问题。因此,我决定在模型服务中手动定义额外的属性,使用预加载方法处理在Vue组件中需要的属性添加/编辑。
安装
在项目目录中运行以下命令以安装包:
composer require ez-laravel/model-services
使用方法
现在您可以这样定义基于模型的服务的代码
<?php namespace App\Services\ModelServices; use EZ\ModelServices\Traits\ModelServiceGetters; use EZ\ModelServices\Contracts\ModelServiceContract; class UserService implements ModelServiceContract { use ModelServiceGetters; private $model; private $records; private $preloadedRecords; public function __construct() { $this->model = "App\Models\User"; } public function preload($instance) { return $instance; } }
方法
一旦注册了服务,以下方法将自动可用:
$users = Users::getAll(); $users = Users::getAllPreloaded(); $numUsers = Users::countAll(); $user = Users::find($id); $user = Users::findBy($field, $value); $user = Users::findPreloaded($id); $user = Users::findPreloadedBy($field, $value);
注册模型服务
为了使类可用,您应该创建一个门面(Facade),并在您的应用程序中注册服务和门面。
注册服务
通过更新app\Providers\AppServiceProvider.php
文件来在IoC容器中注册服务。
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\ModelServices\UserService; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { $this->app->singleton("users", function() { return new UserService; }); } /** * Bootstrap any application services. * * @return void */ public function boot() { // } }
创建门面
例如
<?php namespace App\Facades; use Illuminate\Support\Facades\Facade; class UsersFacade extends Facade { protected static function getFacadeAccessor() { return "users"; } }
注册门面
最后,更新app/config/app.php
配置文件以注册门面。
<?php return [ ... 'aliases' => [ ... 'Users' => App\Facades\UsersFacade::class, ], ];
贡献
我正在寻找反馈!
由于我并不完全确定这是解决最初问题的最佳方法(Vue组件中缺少属性和需要某些类型的仓库类)。
目前,在模型服务被大量使用时,所有记录都被检索以减少执行的查询数量。这可能不是最佳方法,我正在寻找更好的方法。因此,如果您有任何建议,请随时联系我或提交PR!