我有两种模式:
播放列表和图片
播放列表可以包含许多图片。 一张图片属于播放列表。
在表格图像中,我还创建了一个名为“position”的列,它可以包含 整数。
Playlist.php中的:
public function images(){
return $this->hasMany('Image');
}
在Image.php中:
public function playlist(){
return $this->belongsTo('Playlist');
}
我选择播放列表模型:
$playlist = Playlist::with('images')->find($id);
问题:
如何从具有特定位置的$播放列表中选择图像,例如位置1? 我想在控制器中加载所有图像(以便在视图中显示所有位置的所有图像),但在视图中我想选择具有特定位置的图像。
使用:
$playlist->images
我得到所有相关的图像,但我只想要位置栏中有“1”的图像。
编辑:
我得到了这个解决方案:
播放列表中的我创建了一个新函数:
public function imagePosition($position) {
return $this->hasMany('Image')->wherePosition($position)->first();
}
现在我可以在我的视图中选择此图像:
{{$playlist->imagePosition(1)->id}}
这是最好的方式吗?
答案 0 :(得分:1)
使用急切的加载约束,如此;
$playlist = Playlist::with(array('images' => function ($query){
$query->where('position', 1);
}))->find($id);
这会使用图片加载播放列表,但只会加载位置为1的播放列表。
但是如果你想要所有的图像,你可以像这样重新查询结果关系;
$playlist->images()->where('position', 1)->first();
答案 1 :(得分:1)
$users = Playlist::with(array('images' => function($query)
{
// the condition that will be apply on the with relation
}))->find($id);
在“预先加载限制条件”中查看here'段