是的,``LoadMissing''可以与Laravel的嵌套关系一起使用,但是有一些细微差别要注意。
###什么是``loadmissing''?
Laravel雄辩中的“加载方法”方法仅在尚未在模型实例上加载时才能急切地载荷关系。这有助于避免冗余查询,通过检查是否已经存在在再次查询数据库之前[6]。
###使用``loadMissing''与嵌套关系
- 您可以用“ loadMissing”(例如''rution.Contacts''指定嵌套的关系,才能在缺少嵌套的关系[7]时加载嵌套的关系。
- 但是,有一种已知的行为,如果您将已经加载的关系的嵌套关系添加了嵌套关系,那么Laravel可能会重新加载父关系本身。例如,如果您已经在模型上加载了``铭文'',则调用`loadMissing('inscriptions.nesteDration')````'instriptions'')将使``inscriptions''关系完全重新加载[1]。
- 这意味着,尽管“加载”支持嵌套关系,但如果以前加载但没有嵌套关系,则可以触发中间关系的重新加载。
###实际考虑
- 当您想有条件地急切的负载关系时,`loadMissing`都很有用,如果关系已经加载,则可以防止重复查询。
- 对于嵌套关系,您应该意识到,从前加载的父母关系中缺少嵌套的关系可能会导致父母与重新加载的关系,这可能会影响性能。
- 如果您想避免使用此类重载,则可能需要仔细管理何时以及如何加载嵌套关系,或者考虑渴望用``with with()预先加载它们。
### 概括
- 是的,`loadMissing`可以使用点表示法与嵌套关系一起使用。
- 仅在嵌套的关系丢失时加载。
- 但是,如果在没有嵌套关系的情况下加载了父关系,则`loadMissing'可能会重新加载父关系以获取嵌套的数据[1] [6] [7]。
这种行为对于牢记避免在Laravel中的嵌套急切加载时避免多个查询很重要。
引用:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nested-relation-ingraphql
[3] https://compositecode.blog/2023/07/25/graphql-nested-ceries-relationships-practices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-orm-cookbook/001-how-to-to-load-nested-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-what-is-the-purpose-of-the-load-load-load-load-load-function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-loading-of-multiple-nested-realationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries