netkod-bilisim / laravel-model-settings-bag
您可以为Laravel模型添加简单灵活的单个或多个设置。
v1.0.0
2023-08-03 13:55 UTC
Requires
- php: >=7.4
- ext-json: *
- illuminate/database: >=5.5
- illuminate/support: >=5.5
This package is auto-updated.
Last update: 2024-09-03 16:14:05 UTC
README
简介
您可以为Laravel模型添加简单灵活的单个或多个设置。
要求
- PHP >= 7.4
安装
composer require netkod-bilisim/laravel-model-settings-bag:"^1"
集成
单个设置
1. 在模型迁移中添加JSON设置字段。
create_users_table.php
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->json('settings')->nullable(); $table->rememberToken(); $table->timestamps(); });
2. 在您的模型中使用特质 NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag
。
User.php
use NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use ModelHasSettingsBag; // truncated for brevity.. }
多个
1. 在模型迁移中添加JSON设置字段。
create_user_template_settings_table.php
Schema::create('user_template_settings', function (Blueprint $table) { $table->id(); $table->unsignedInteger('user_id'); $table->json('settings')->nullable(); $table->rememberToken(); $table->timestamps(); });
2. 在其他设置模型中使用特质 NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag
。
User TemplateSetting.php
use NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag; use Illuminate\Database\Eloquent\Model; class UserTemplateSetting extends Model { use ModelHasSettingsBag; }
3. 在您的模型中使用特质 NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag
。
User.php
class User extends Model { use ModelHasSettingsBag; public function templateSettings() { return $this->hasOne(User TemplateSetting::class); } }
使用方法
1.) 获取模型的所有设置。
$user = App\User::first(); $user->settings()->all(); // Returns an array of the user's settings. $user->settings('template')->get(); // Returns an array of a user's template settings.
2.) 获取特定的设置。
$user = App\User::first(); $user->settings()->get('some.setting'); $user->settings()->get('some.setting', $defaultValue); // With a default value. $user->settings('template')->get('layout.boxed'); $user->settings('template')->get('layout.boxed', $defaultValue); // With a default value.
3.) 添加或更新设置。
$user = App\User::first(); $user->settings()->update('some.setting', 'new value'); $user->settings('template')->update('layout.boxed', 'new value');
4.) 确定模型是否有特定的设置。
$user = App\User::first(); $user->settings()->has('some.setting'); $user->settings('template')->has('layout.boxed');
5.) 从模型中删除设置。
$user = App\User::first(); $user->settings()->delete('some.setting'); $user->settings('template')->delete('layout.boxed');
6.) 为新模型设置默认设置。
如果您在模型上定义了 $defaultSettings
作为数组属性,我们将使用其值作为未设置的新模型默认设置。
User.php
use NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use ModelHasSettingsBag; /** * The model's default settings. * * @var array */ protected $defaultSettings = [ 'homepage' => '/profile' ]; // truncated for brevity.. }
7.) 指定允许的设置。
如果您将 $allowedSettings
定义为数组属性,则只有与 $allowedSettings
数组中的值匹配的设置才会被保存到模型中。
User.php
use NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use ModelHasSettingsBag; /** * The model's allowed settings. * * @var array */ protected $allowedSettings = ['homepage']; // truncated for brevity.. }
8.) 使用除 settings() 之外的其他方法名
如果您希望使用除 settings
之外的其他名称,可以通过定义 $mapSettingsTo
属性来实现。这会将方法调用(如 config()
)映射到 settings()
方法。
User.php
use NetkodBilisim\LaravelModelSettingsBag\ModelHasSettingsBag; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use ModelHasSettingsBag; /** * The settings field name. * * @var string */ protected $mapSettingsTo = 'config'; }
许可证
此软件包是开源软件,根据 MIT 许可证 许可。