はい、「LoadMissing」はLaravelのネストされた関係で使用できますが、注意すべきいくつかのニュアンスがあります。
###「LoadMissing」とは何ですか?
Laravel Eloquentの「LoadMissing」メソッドは、モデルインスタンスにまだロードされていない場合にのみ、負荷関係をeateするために使用されます。これにより、データベースを再度照会する前に関係データが既に存在するかどうかを確認することにより、冗長クエリを回避できます[6]。
ネストされた関係で「LoadMissing」を使用して###
- 「loadmissing」を使用して、「loadmissing」を使用してドット表記でネストされた関係を指定できます。
- ただし、既にロードされている関係のネストされた関係を「ロードミス」する場合、Laravelは親関係自体をリロードする可能性がある既知の動作があります。たとえば、モデルにすでに「碑文」をロードしている場合、「loadmissing( 'Inscriptions.nestedrelation')を呼び出すと、「碑文」の関係が完全にリロードされます[1]。
- これは、「ロードミス」はネストされた関係をサポートしているが、以前にロードされていたがネストされた関係がない場合、中間関係のリロードをトリガーできることを意味します。
###実用的な考慮事項
- 「LoadMissing」は、条件付きで熱心な負荷関係を希望する場合に役立ち、関係が既にロードされている場合に重複したクエリを防ぎます。
- ネストされた関係の場合、以前にロードされた親の関係から欠落しているネストされた関係をロードすると、親の関係がリロードされ、パフォーマンスに影響を与える可能性があることに注意する必要があります。
- そのようなリロードを避けたい場合は、ネストされた関係をいつ、どのようにロードするかを慎重に管理するか、 `with"で熱心なロードを前向きに検討する必要がある場合があります。
### まとめ
- はい、「LoadMissing」は、DOT表記を使用してネストされた関係で使用できます。
- ネストされた関係が欠落している場合にのみロードします。
- しかし、親の関係がネストされた関係なしにロードされている場合、「ロードミッシング」は親の関係をリロードしてネストされたデータを取得する可能性があります[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-lelationships-practices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-orm-cookbook/001-how-to-load-nested-reation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-purposeof-the-loadmissing-function
[7] https://stackoverflow.com/questions/35490728/laravel-eLoquent-eager-loading-of-multiple-nested-lelationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries