跳到主要内容

← 概述 · 返回 README · 使用设置 →

快速开始

要求​

  • PHP 8.3 或更高版本。
  • Laravel 12 或 13。

安装软件包​

composer require dragon-code/laravel-model-settings

Laravel 会自动发现此软件包的服务提供者。

发布配置和迁移,然后创建设置表:

php artisan vendor:publish --tag="model_settings"
php artisan migrate

model_settings 标签会发布 config/model_settings.php 和软件包迁移。默认迁移使用应用程序的默认数据库 连接创建 settings 表。

添加 trait​

将 HasSettings 添加到每个需要设置的 Eloquent 模型:

namespace App\Models;

use DragonCode\LaravelModelSettings\Concerns\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use HasSettings;
}

此 trait 添加以下公共方法:

方法用途
settings()读取或修改一个已保存模型的最终设置
defaultSettings()读取或修改模型类的默认值
modelSettings()用于预加载的 Eloquent 关联

保存第一个设置​

为所有已保存的 User 模型创建默认值:

(new User)->defaultSettings()->set('timezone', 'UTC');

为一个已保存用户覆盖该值:

$user = User::query()->firstOrFail();

$user->settings()->set('timezone', 'Europe/Paris');

assert($user->settings()->get('timezone') === 'Europe/Paris');

将所有最终设置读取为按设置名称索引的集合:

$settings = $user->settings()->all();

assert($settings->get('timezone') === 'Europe/Paris');

删除覆盖值以重新使用 UTC:

$user->settings()->forget('timezone');

assert($user->settings()->get('timezone') === 'UTC');

先保存模型​

只有在父模型保存后才能调用 settings()->set()、setMany()、forget()、forgetMany() 和 purge()。 对于未保存的模型,即使类默认值存在,settings()->get() 也会返回 null,settings()->has() 返回 false,settings()->all() 会返回空集合。每个修改方法都会在执行存储查询前抛出 DragonCode\LaravelModelSettings\Exceptions\InvalidSettingsOwnerException。

另请参阅​

  • 使用设置 — 了解优先级、删除、键和值。
  • 配置 — 选择连接、数据表或存储模型。
  • 预加载 — 高效加载模型集合的设置。