我正在运行此查询:
Music::where('title', $title)->with(['artists.images'])->get();
结果,我有一个音乐列表
array:4 [▼
0 => Music {#276 ▶}
1 => Music {#275 ▶}
2 => Music {#274 ▶}
3 => Music {#273 ▶}
]
每首音乐都与艺术家有关(例如由3位艺术家演唱的音乐)
// Music #1
...
relations: array:1 [▼
"artists" => Collection {#269 ▼
items: array:3 [▶]
}
]
...
每个艺术家都与图像有关系(艺术家有7个图像)
// Artist #1 of Music #1
...
relations: array:2 [▼
"pivot" => Pivot {#329 ▶}
"images" => Collection {#505 ▼
items: array:7 [▶]
}
]
...
一切都很好。
但是在我的视图文件中,当我这样做时(在foreach
循环中)
@foreach($music->artists()->where('type', 'feature')->get() as $feature)
{{ $feature->name }}
@endforeach
它再次运行许多查询来实现此目的。 $music->artists
应该已经急切加载,因此不必再次运行查询。当我在其上运行dd()
时,它实际上包含了上面提到的关系。
如何在不再次运行这些查询的情况下简单地获取属性?
答案 0 :(得分:0)
渴望加载关系可以像这样完成
@foreach($music->with(['artists.images'] )->artists()->where('type', 'feature')->get() as $feature)
{{ $feature->name }}
@endforeach
如果这不起作用,那么用像...这样的过滤器替换你的位置。
@foreach($music->with(['artists.images'] )->artists->filter(function($it){return $it->type===' feature'} ) as $feature)
{{ $feature->name }}
@endforeach