Php Laravel 7雄辩:模型上的方法refresh()忽略默认(嵌套)的即时加载
我正在保存/更新模型,并使用刷新()方法输出新数据 Laravel的文件中说: 如果计划在使用save或saveMany方法后访问关系,则可能希望使用refresh方法重新加载模型及其关系 控制器 模型 在漫画模型中,我定义了默认的渴望加载:Php Laravel 7雄辩:模型上的方法refresh()忽略默认(嵌套)的即时加载,php,laravel,laravel-7,Php,Laravel,Laravel 7,我正在保存/更新模型,并使用刷新()方法输出新数据 Laravel的文件中说: 如果计划在使用save或saveMany方法后访问关系,则可能希望使用refresh方法重新加载模型及其关系 控制器 模型 在漫画模型中,我定义了默认的渴望加载: protected $with = ['series', 'series.publisher']; 这对于一个简单的GET方法来说是完美的。但是如果我保存模型并对其使用refresh(),则输出将丢失其关系 store()和update()方法的行为
protected $with = ['series', 'series.publisher'];
这对于一个简单的GET方法来说是完美的。但是如果我保存模型并对其使用refresh(),则输出将丢失其关系
store()和update()方法的行为也不同。store()-方法与我无关。update()-方法只返回序列关系(而不是嵌套关系)
这是一个bug还是我在文档中遗漏了什么
谢谢
示例数据
这实际上是
刷新
工作原理的预期结果<代码>刷新仅重新加载已加载的关系。在第一个示例中,没有加载任何关系,因为该模型没有从数据库中检索到,它是您直接创建的全新模型实例。第二个示例很可能是一个路由模型绑定,其中模型已从数据库返回,并且由于您使用的是受保护的$with
,因此它加载了这些关系,因此重新加载了这些关系。这实际上是刷新
的工作原理<代码>刷新仅重新加载已加载的关系。在第一个示例中,没有加载任何关系,因为该模型没有从数据库中检索到,它是您直接创建的全新模型实例。第二个示例很可能是一个路由模型绑定,其中模型已从数据库返回,并且由于您使用的是protected$with
,因此它加载了这些关系,因此重新加载了这些关系。好的,我理解的第一部分。但是为什么嵌套关系没有加载?因为它会重新加载为“this”模型加载的关系publisher
位于series
上,该型号不是正在重新加载的型号。。。当前模型不知道任何其他模型的其他情况,它只知道它的关系,嵌套关系意味着不同模型上的关系。。。当前模型只知道有一个名为$relations
的数组,它为自己存储加载的关系。。。它没有跟踪任何其他模型加载了什么,这是我理解的第一部分。但是为什么嵌套关系没有加载?因为它会重新加载为“this”模型加载的关系publisher
位于series
上,该型号不是正在重新加载的型号。。。当前模型不知道任何其他模型的其他情况,它只知道它的关系,嵌套关系意味着不同模型上的关系。。。当前模型只知道有一个名为$relations
的数组,它为自己存储加载的关系。。。它不跟踪任何其他型号已加载的内容。顺便说一句,您只需要系列。publisher
,它必须加载系列
才能加载publisher
,因此,如果您有系列,您无需指定它加载系列。publisher
顺便说一句,您只需要系列。publisher
,它必须加载series
才能加载publisher
,因此如果您有series.publisher
protected $with = ['series', 'series.publisher'];
{
"comic_id":21,
"series_id":5,
"comic_issue":"2",
"comic_name":"Test after 6",
"status_id":1,
"comic_rating":null,
"comic_release_date":"2015-09-26",
"comic_read_date":null,
"comic_summary":"Summary 5",
"created_at":"2020-08-07T17:28:14.000000Z",
"updated_at":"2020-08-08T17:14:16.000000Z",
"series":
{
"series_id":5,
"series_name":"Assumenda consectetur.",
"publisher_id":4,
"release_date":null,
"publisher":
{
"publisher_id":4,
"publisher_name":"Aliquam earum."
}
}
}