我如何使用whenLoaded()进行比一级更深的关系?似乎只能whenLoaded
像这样使用第一个关系深度:
'season' => $this->whenLoaded('origin', function () {
return new SeasonResource($this->origin->season);
}),
Run Code Online (Sandbox Code Playgroud)
但是,如果Laravel origin
加载了(如果未加载),那么season
Laravel将会加载它,这会导致N + 1问题。这两个origin
和season
的关系是有条件的,而且并不总是使用。因此,我想使用这样的东西:
$this->whenLoaded('origin.season', ...)
Run Code Online (Sandbox Code Playgroud)
或这个:
'season' => $this->whenLoaded('origin', function () {
return new SeasonResource($this->origin->whenLoaded('season'));
}),
Run Code Online (Sandbox Code Playgroud)
这些都不起作用。我想更深层次的关系不存储在模型本身上,在第二种情况下,whenLoaded()
查询生成器上不存在。
我如何使用whenLoaded()进行比一级更深的关系?
我相信未实现的原因是因为它仅对hasOne
和belongsTo
关系有意义(返回对象而不是集合的关系)。
但是,如果是这样,您可以这样做:
'season' => $this->when(
$this->relationLoaded('origin') &&
$this->origin->relationLoaded('season'),
function () {
return new SeasonResource($this->origin->season);
}
),
Run Code Online (Sandbox Code Playgroud)
基本上,使用->when
代替->whenLoaded
并手动检查是否使用->relationLoaded
模型上的public方法加载了关系。
归档时间: |
|
查看次数: |
1006 次 |
最近记录: |