Перейти к основному содержимому

← Обзор · Вернуться к 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, используя стандартное подключение приложения к базе данных.

Добавление трейта​

Добавьте HasSettings в каждую Eloquent-модель, которой нужны настройки:

namespace App\Models;

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

class User extends Authenticatable
{
use HasSettings;
}

Трейт добавляет следующие публичные методы:

МетодНазначение
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 до выполнения запроса к хранилищу.

См. также​