Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Môže byť načítavanie použité s vnorenými vzťahmi


Môže byť načítavanie použité s vnorenými vzťahmi


Áno, „Loadmissing“ sa dá použiť s vnorenými vzťahmi v Laravel, ale existujú určité nuansy, o ktorých je potrebné vedieť.

Čo je `loadMissing`?

Metóda „Loadmissing“ v Laravel Eloquent sa používa na dychtivé vzťahy s načítaním, iba ak ešte neboli načítané v inštancii modelu. To pomáha vyhnúť sa redundantným dotazom kontrolou, či sú údaje vzťahu už prítomné pred opätovným dotazovaním databázy [6].

Používanie `Loadmissing` s vnorenými vzťahmi

- Môžete určiť vnorené vzťahy v bode notácie s `loadmissing`, napríklad` 'autor.contacts'`, načítať vnorený vzťah iba v prípade, že chýba [7].
- Existuje však známe správanie, keď ak „LADMissing“ je vnorený vzťah vzťahu, ktorý je už načítaný, Laravel môže načítať samotný rodičovský vzťah. Napríklad, ak ste už načítali „nápisy“ na modeli, potom volajte „Loadmissing (“ nápisy.Nestestrelation ') `spôsobí„ vzťahy nápisov “, ktorý sa úplne načítava [1].
- To znamená, že zatiaľ čo „LoadMissing“ podporuje vnorené vzťahy, môže spustiť načítanie medziproduktov, ak boli predtým načítané, ale bez vnoreného vzťahu.

Praktické úvahy

- „LoadMissing“ je užitočné, ak chcete podmienečne dychtivé vzťahy s načítaním, čo zabráni duplicitným dotazom, ak je vzťah už načítaný.
- V prípade vnorených vzťahov by ste si mali byť vedomí, že načítanie vnoreného vzťahu, ktorý chýba z predtým načítaného rodičovského vzťahu, môže spôsobiť rodičovský vzťah k opätovnému načítaniu, čo môže ovplyvniť výkon.
- Ak sa chcete vyhnúť takýmto opätovným načítaním, možno budete musieť starostlivo zvládnuť, kedy a ako načítate vnorené vzťahy alebo zvážite dychtivé načítanie ich vopred s () `.

Zhrnutie

- Áno, „LoadMissing“ sa dá použiť s vnorenými vzťahmi pomocou bodovej zápisu.
- Načítava vnorené vzťahy iba vtedy, ak chýbajú.
- Ak je však rodičovský vzťah načítaný bez vnoreného vzťahu, „LoadMissing“ môže načítať rodičovský vzťah na načítanie vnorených údajov [1] [6] [7].

Toto správanie je dôležité mať na pamäti, aby sa predišlo neočakávaným viacerým dotazom pri práci s vnoreným zaťažením v Laravele.

Citácie:
[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-nensted-queies-relationships-practices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-Orm-ookbook/001-how-to-load-ned-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-the-loading-function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-of-multiple-ned-rest-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries