Перейти до основного вмісту

← Огляд · Повернутися до 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 до виконання запиту до сховища.

Див. також​