Повернутися до README · Початок роботи →
Laravel Model Settings
Laravel Model Settings зберігає спільні налаштування за замовчуванням і перевизначення для окремих моделей в окремій таблиці бази даних. Пакет підходить для випадків, коли всі моделі мають починати з однакового значення, але окремі записи можуть його перевизначати.
Пакет не додає стовпці налаштувань до батьківських таблиць. Налаштування не залежать від схеми моделі й групуються за morph-класом Eloquent-моделі.
Коли пакет підходить
| Вимога | Поведінка пакета |
|---|---|
| Надати всім збереженим моделям однакове початкове значення | Зберегти одне значення за замовчуванням для класу |
| Змінити значення однієї моделі | Зберегти перевизначення для цієї моделі |
| Видалити перевизначення | Знову використовувати значення за замовчуванням для класу |
| Прочитати налаштування багатьох моделей | Попередньо завантажити один зв’язок зі значеннями за замовчуванням і перевизначеннями |
Порядок вибору значення
Під час читання налаштування пакет повертає перше доступне значення:
- Перевизначення для збереженої моделі.
- Значення за замовчуванням для класу цієї моделі.
null.
| Джерело | timezone |
|---|---|
Значення за замовчуванням для User | UTC |
| Перевизначення для користувача 123 | Europe/Paris |
| Підсумкове значення для користувача 123 | Europe/Paris |
| Підсумкове значення для іншого збереженого користувача | UTC |
Видалення перевизначення знову відкриває значення за замовчуванням. Саме значення за замовчуванням не видаляється.
Основні операції
(new User)->defaultSettings()->set('timezone', 'UTC');
$user->settings()->set('timezone', 'Europe/Paris');
$timezone = $user->settings()->get('timezone');
$settings = $user->settings()->all();
$hasTimezone = $user->settings()->has('timezone');
$user->settings()->setMany([
'locale' => 'fr',
'notifications.email' => true,
]);
$user->settings()->forgetMany(['timezone', 'locale']);
get() повертає одне підсумкове значення. all() повертає
Illuminate\Support\Collection, у якій значення за замовчуванням об’єднані з перевизначеннями.
Використовуйте has(), коли важлива наявність підсумкового ключа, зокрема для збереженого JSON
null. get() навмисно не приймає резервне значення від викликача: єдиним резервним значенням є
збережене значення класу за замовчуванням, після якого повертається null, якщо ключа немає в обох
областях.
Для значень за замовчуванням і перевизначень доступні однакові операції: all(), get(), has(),
set(), setMany(), forget(), forgetMany() і purge().
Межі спеціалізованого пакета
Laravel Model Settings — спеціалізований пакет Eloquent, а не універсальний фреймворк налаштувань застосунку.
| Межа | Навмисна поведінка |
|---|---|
| Зберігання | Одна таблиця бази даних; без Redis і зберігання в полях батьківської моделі |
| Значення за замовчуванням | Службові рядки в тій самій таблиці; без другої таблиці значень за замовчуванням |
| Реєстрація | Без реєстру репозиторіїв, типізованих глобальних класів налаштувань і виявлення класів |
| Міграції | Без засобу запуску міграцій для окремих ключів налаштувань |
| Кешування | Без обов’язкового міжзапитного кешу; попереднє завантаження повторно використовує лише завантажений зв’язок |
Застосунки з такими вимогами мають реалізувати їх поза пакетом, а не використовувати
modelSettings або внутрішній репозиторій як API розширення.
Межі зберігання
Кожен рядок визначається чотирма значеннями:
| Значення | Зміст |
|---|---|
item_type | Morph-клас батьківської моделі або псевдонім із morph map |
item_id | Первинний ключ батьківської моделі; для налаштувань класу за замовчуванням зберігається фізичне значення 0 |
is_default | true для налаштування класу за замовчуванням, false для перевизначення моделі |
key | Назва налаштування |
Завдяки цьому значення за замовчуванням незалежні для кожного класу моделі. Значення за замовчуванням
для User ніколи не стає значенням за замовчуванням для Post, навіть якщо обидва класи
використовують однаковий ключ налаштування.
Підтримувані моделі
Пакет підтримує Eloquent-моделі з цілочисловими, рядковими, UUID- або ULID-первинними ключами.
Збережені моделі з цілим ідентифікатором 0 або рядковим '0' можуть зберігати перевизначення без
конфлікту зі значеннями класу за замовчуванням. Також можна використовувати Laravel morph map.
Налаштування окремих моделей належать лише збереженим моделям. Незбережена модель не успадковує
значення за замовчуванням: get() повертає null, has() — false, а all() — порожню колекцію.
Виклик set(), setMany(), forget(), forgetMany() або purge() для незбереженого власника
викидає InvalidSettingsOwnerException до виконання запиту до сховища.
Дані налаштувань зберігаються у JSON, включно з null, порожніми рядками, рядками з пробілів,
порожніми масивами, нулем і false. Без налаштованого перетворення читання повертає точне
декодоване значення. Перетворення даних дають змогу повертати об’єкти застосунку.
Див. також
- Початок роботи — встановлення пакета й налаштування моделі.
- Робота з налаштуваннями — керування значеннями за замовчуванням, перевизначеннями, ключами й значеннями.
- Довідник API — усі публічні методи й типи, що повертаються.