Oui, la «mission de charge» peut être utilisée avec des relations imbriquées dans Laravel, mais il y a des nuances à connaître.
Qu'est-ce que «LoadMissing»?
La méthode de «chargement» dans Laravel Eloquent est utilisée pour avoir des relations de charge désireuses uniquement si elles n'ont pas déjà été chargées sur l'instance du modèle. Cela permet d'éviter les requêtes redondantes en vérifiant si les données de la relation sont déjà présentes avant d'interroger à nouveau la base de données [6].
Utilisation de `LoadMissing 'avec des relations imbriquées
- Vous pouvez spécifier des relations imbriquées dans la notation DOT avec «Loadmissing», telles que `` Auteur.Contacts '', pour charger une relation imbriquée uniquement si elle manque [7].
- Cependant, il existe un comportement connu où si vous «chargez» une relation imbriquée d'une relation qui est déjà chargée, Laravel peut recharger la relation parent elle-même. Par exemple, si vous avez déjà chargé des «inscriptions» sur un modèle, alors appeler «Loadmissing (« Inscriptss.NestedRelation »)« provoquera la relation `` Inscriptions »avec un rechargement entièrement [1].
- Cela signifie que, même si le «chargement» prend en charge les relations imbriquées, elle peut déclencher le rechargement des relations intermédiaires si elles étaient auparavant chargées mais sans la relation imbriquée.
Considérations pratiques
- «Loadmissing» est utile lorsque vous souhaitez des relations de chargement conditionnellement désireuses, empêchant les requêtes en double si la relation est déjà chargée.
- Pour les relations imbriquées, vous devez savoir que le chargement d'une relation imbriquée manquante dans une relation parent précédemment chargée peut entraîner la relation parent avec le rechargement, ce qui peut avoir un impact sur les performances.
- Si vous souhaitez éviter de tels recharges, vous devrez peut-être gérer attentivement quand et comment vous chargez des relations imbriquées ou envisager de les charger d'avance avec `avec () '.
Résumé
- Oui, «Loadmissing» peut être utilisé avec des relations imbriquées en utilisant la notation de points.
- Il ne charge les relations imbriquées que si elles manquent.
- Mais si la relation parent est chargée sans la relation imbriquée, «LoadMissing» peut recharger la relation parent pour récupérer les données imbriquées [1] [6] [7].
Ce comportement est important à garder à l'esprit pour éviter les requêtes multiples inattendues lorsque vous travaillez avec un chargement impatient imbriqué à Laravel.
Citations:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-neted-relation-in-graphql
[3] https://compositeCode.blog/2023/07/25/graphql-nesed-queries-lalationnships-pactices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-orm-cookbook/001-how-to-load-nested-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-the-wadoadmising-function
[7] https://stackoverflow.com/questions/35490728/laravel-elognent-eager-loading-of-multiple-nesed-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.primma.io/docs/orm/primma-lient/queries/relation-Queries