Перайсці да асноўнага змесціва

Вярнуцца да README · Пачатак працы →

Laravel Model Settings

Laravel Model Settings захоўвае агульныя налады па змаўчанні і перавызначэнні для асобных мадэляў у асобнай табліцы базы даных. Пакет падыходзіць, калі ўсе мадэлі павінны пачынаць з аднолькавага значэння, але асобныя запісы могуць яго перавызначаць.

Пакет не дадае слупкі налад у бацькоўскія табліцы. Налады не залежаць ад схемы мадэлі і групуюцца па morph-класе Eloquent-мадэлі.

Калі пакет падыходзіць​

ПатрабаваннеПаводзіны пакета
Задаць усім захаваным мадэлям аднолькавае пачатковае значэннеЗахаваць адно значэнне па змаўчанні для класа
Змяніць значэнне адной мадэліЗахаваць перавызначэнне для гэтай мадэлі
Выдаліць перавызначэннеЗноў выкарыстоўваць значэнне па змаўчанні для класа
Прачытаць налады многіх мадэляўПапярэдне загрузіць адну сувязь са значэннямі па змаўчанні і перавызначэннямі

Парадак выбару значэння​

Пры чытанні налады пакет вяртае першае даступнае значэнне:

  1. Перавызначэнне для захаванай мадэлі.
  2. Значэнне па змаўчанні для класа гэтай мадэлі.
  3. null.
Крыніцаtimezone
Значэнне па змаўчанні для UserUTC
Перавызначэнне для карыстальніка 123Europe/Paris
Выніковае значэнне для карыстальніка 123Europe/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_typeMorph-клас бацькоўскай мадэлі або псеўданім з morph map
item_idПершасны ключ бацькоўскай мадэлі; для налад класа па змаўчанні захоўваецца фізічнае значэнне 0
is_defaulttrue для налады класа па змаўчанні, 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 — усе публічныя метады і тыпы, якія вяртаюцца.