← Праца з наладамі · Вярнуцца да README · Канфігурацыя →
Папярэдняя загрузка
Загрузка налад разам з мадэлямі
Без папярэдняй загрузкі кожны выклік settings()->get(), settings()->has() або
settings()->all() выконвае запыт налад. Такое чытанне праз сэрвіс не загружае modelSettings як
пабочны эфект.
Загружайце сувязь загадзя, калі вынік змяшчае некалькі мадэляў:
$users = User::query()
->with('modelSettings')
->get();
$timezones = $users->map(
fn (User $user) => $user->settings()->get('timezone')
);
Папярэдне загружаная сувязь змяшчае перавызначэнні кожнай мадэлі і ўсе атрыманыя ў спадчыну значэнні
па змаўчанні. Наступныя выклікі get(), has() і all() выкарыстоўваюць загружаную сувязь.
Загрузка налад пасля запыту
Калі мадэлі ўжо атрыманы, выкарыстоўвайце loadMissing():
$users->loadMissing('modelSettings');
$settings = $users->map(
fn (User $user) => $user->settings()->all()
);
Межы сувязі
Выкарыстоўвайце modelSettings толькі з with(), load() або loadMissing() і як уласцівасць ужо
загружанай сувязі. Гэта аптымізацыя чытання, а не альтэрнатыўны API запытаў або CRUD. Чытайце і
змяняйце значэнні праз settings() або defaultSettings().
Паводзіны запытаў
Калі атрымаць бацькоўскія мадэлі, а затым прачытаць іх налады, для адной мадэлі лянівая і папярэдняя загрузка маюць аднолькавы кошт. Для калекцыі розніца бачная:
| Загружана бацькоўскіх мадэляў | Лянівая загрузка | Папярэдняя загрузка |
|---|---|---|
| 1 | 2 запыты | 2 запыты |
| N | 1 + N запытаў | 2 запыты |
Пры папярэдняй загрузцы выконваюцца:
- Адзін запыт бацькоўскіх мадэляў.
- Адзін запыт іх значэнняў па змаўчанні і перавызначэнняў.
Запыт налад уключае значэнні класа па змаўчанні і ідэнтыфікатары ўсіх запытаных мадэляў. Затым сувязь капіруе атрыманыя ў спадчыну значэнні па змаўчанні ў загружаны вынік кожнай мадэлі і замяняе аднолькавыя ключы перавызначэннямі гэтай мадэлі.
Такія паводзіны пакрыты для цэлалікавых, радковых, UUID- і ULID-першасных ключоў.
Змены пасля папярэдняй загрузкі
Пасля паспяховага выкліку set(), setMany(), forget(), forgetMany() або purge() пакет роўна
адзін раз ачышчае загружаную сувязь modelSettings у адпаведнай мадэлі. Наступнае чытанне праз
сэрвіс запытвае актуальнае выніковае значэнне, таму састарэлыя даныя не вяртаюцца. Пры памылцы
групавога змянення наяўная загружаная сувязь захоўваецца, а транзакцыйны пакет адкочваецца.
Перад наступным пакетным чытаннем яўна загрузіце сувязь зноў:
$user->settings()->setMany([
'timezone' => 'Europe/Paris',
'locale' => 'fr',
]);
$user->load('modelSettings');
Змяненне ўсё роўна выконвае ўласныя запыты на запіс. Папярэдняя загрузка ўплывае толькі на наступныя чытанні.
Гл. таксама
- Праца з наладамі — аб’яднанне значэнняў па змаўчанні і перавызначэнняў.
- Даведнік API — адрозненні паміж метадамі сэрвісу і сувяззю.
- Канфігурацыя — налада падключэння і мадэлі захоўвання.