Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Може завантажуватись використовувати з вкладеними відносинами


Може завантажуватись використовувати з вкладеними відносинами


Так, `навантаження" можна використовувати з вкладеними відносинами в Laravel, але є деякі нюанси, про які можна знати.

Що таке `завантаження '?

Метод "навантаження" в Laravel красномовний використовується для прагнення навантаження, лише якщо вони ще не завантажувались на екземпляр моделі. Це допомагає уникнути надмірних запитів, перевіряючи, чи є дані про відносини вже перед тим, як запитати базу даних [6].

Використання `навантаження` з вкладеними відносинами

- Ви можете вказати вкладені відносини в точці позначення з `навантаженням", наприклад, `'auth.contacts'`, завантажити вкладені відносини лише у тому випадку, якщо воно відсутнє [7].
- однак, існує відома поведінка, де, якщо ви "завантажуєте" вкладене відношення відношення, яке вже завантажено, Laravel може перезавантажити самі батьківські відносини. Наприклад, якщо ви вже завантажили `написи" на модель, то викликаючи "завантаження ('написи.
- Це означає, що, хоча `навантаження` підтримує вкладені відносини, це може викликати перезавантаження проміжних відносин, якщо вони раніше були завантажені, але без вкладених відносин.

практичні міркування

- `Завантаження 'корисно, коли ви хочете умовно прагнути навантаження, запобігаючи повторюванню запитів, якщо відношення вже завантажено.
- Для вкладених відносин ви повинні знати, що завантаження вкладеного відношення, відсутнього у раніше завантаженому батьківському відношенні, може спричинити відношення батьків до перезавантаження, що може вплинути на продуктивність.
- Якщо ви хочете уникнути таких перезавантажень, можливо, вам доведеться ретельно керувати, коли і як ви завантажуєте вкладені відносини або вважаєте прагнення їх завантажити вперед з `з ()`.

Резюме

- Так, `навантаження" можна використовувати з вкладеними відносинами за допомогою точки позначення.
- Він навантажує вкладені відносини лише у тому випадку, якщо вони відсутні.
- але якщо батьківське відношення завантажується без вкладеного відношення, `навантаження 'може перезавантажити батьківське відношення до отримання вкладених даних [1] [6] [7].

Така поведінка важлива, щоб пам’ятати, щоб уникнути несподіваних декількох запитів під час роботи з вкладеним нетерплячим завантаженням у Laravel.

Цитати:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nested-relation-in-graphql
[3] https://compositecode.blog/2023/07/25/graphql-nested-queries-relationships-practices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-ororm-cookbook/001-how-to-load-nested-relation.html
.
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-of-multiple-nested-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries