edulazaro / larakeep
Laravel模型字段维护任务
Requires
- php: ^8.1
- laravel/framework: ^9
README
简介
Larakeep 是一个允许创建和处理的 Keepers 的包。Keepers 允许维护所需模型字段的值。
有时,在创建或更新模型实例时必须配置字段值。做这件事的常见地方是观察者。这可能导致观察者中重复代码过多或模型中函数过多,从而导致文件变大。
keepers 允许在独立的类中设置所需字段的值,使代码更简洁。
如何安装 Larakeep
在 Laravel 根项目文件夹中执行此命令
composer require edulazaro/larakeep
如何创建 Keeper
您可以手动创建 Keeper 或使用 make
命令
php artisan make:keeper MyModelKeeper
默认情况下,Keeper 将为模型 \App\Models\MyModel
创建。
您也可以通过使用第二个参数指定为创建 Keeper 的模型
php artisan make:keeper MyClassKeeper \App\Models\Whatever\MyModel
在这种情况下,keeper 将为模型 \App\Models\Whatever\MyModel
创建。
如何配置 Keeper
创建 Keeper 后,您需要将 HasKeepers
关注点添加到引用模型
namespace App\Models; use Illuminate\Database\Eloquent\Model; use EduLazaro\Larakeep\Concerns\HasKeepers; class MyModel extends Model { use HasKeepers; }
然后,您需要在任何服务提供者的 boot
方法中将 keeper 分配给模型
namespace App\Providers; use App\Models\MyModel; use App\Keepers\MyModelKeeper; class AppServiceProvider extends Model { // ... public function boot() { // ... MyModel::keep(MyModelKeeper::class); } }
您可以为单个模型添加多个 Keepers
MyModel::keep(MyModelKeeperA::class); MyModel::keep(MyModelKeeperB::class);
如何使用 Keeper
要使用 Keeper,您需要使用单词 get
+ 保留模型的 camel case 版本以维护。例如,通常将模型名称和模型的搜索字符串分开。在这种情况下,keeper 方法很方便来设置属性值
namespace App\Keepers; use \App\Models\MyClass; class MyClassKeeper { // ... public function getSearchText() { return $this->myClass->name . ' ' . $this->myClass->tag; } }
此方法也可以接受参数,通过在方法名称中添加关键字 With
namespace App\Keepers; use \App\Models\MyClass; class MyClassKeeper { // ... public function getSearchTextWith($whatever) { return $this->myClass->name . ' ' . $this->myClass->tag; } }
现在,在观察者中,您可以维护 search_text
字段并设置其值
$myClassInstance->maintain('search_text'); // To execute the getSearchText method.
如果方法有参数
$myClassInstance->maintainWith('search_text', 'Any string'); // To execute the getSearchTextWith method.
您还可以传递一个字段数组以同时维护所有字段
$myClassInstance->maintain(['search_text', 'word_count']);
模型仍需要被保存。
如何添加任务
您可以在 keeper 方法的前面添加任何不是 get
的单词,比如 configure
namespace App\Keepers; use \App\Models\MyClass; class MyClassKeeper { // ... public function configureSearchText() { return $this->myClass->name . ' ' . $this->myClass->tag; } }
同样,这些方法也可以接受参数
namespace App\Keepers; use \App\Models\MyClass; class MyClassKeeper { // ... public function configureSearchTextWith($whatever) { return $this->myClass->name . ' ' . $this->myClass->tag; } }
但是,要使用这些方法维护这些字段,您需要使用 maintainTask
方法,并使用您添加的名称
$myClassInstance->maintainTask('configure','search_text');
如果方法有参数
$myClassInstance->maintainTaskWith('configure', 'search_text', 'Any string');
您还可以传递一个字段数组以同时维护所有字段
$myClassInstance->maintainTask('configure', ['search_text', 'word_count']);
模型仍需要被保存。
许可
Larakeep 是在 MIT 许可下许可的开源软件,许可文件位于 MIT 许可。