Вярнуцца да 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 — усе публічныя метады і тыпы, якія вяртаюцца.