netkod-bilisim/laravel-model-settings-bag

您可以为Laravel模型添加简单灵活的单个或多个设置。

v1.0.0 2023-08-03 13:55 UTC

This package is auto-updated.

Last update: 2024-09-03 16:14:05 UTC


README

Latest Stable Version Total Downloads Dependents License License Scrutinizer StyleCI

简介

您可以为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 许可证 许可。