laravel 使用 where 子句获取关系 hasMany 模型
laravel get relation hasMany model with where clause
我有两个模型:
播放列表和图片
一个播放列表可以有很多张图片。
一张图片属于一个播放列表。
在 table 图像中,我还创建了一个名为 "position" 的列,其中可以包含
整数。
在Playlist.php中:
public function images(){
return $this->hasMany('Image');
}
在Image.php中:
public function playlist(){
return $this->belongsTo('Playlist');
}
我select一个播放列表型号:
$playlist = Playlist::with('images')->find($id);
问题:
如何 select 我的 $playlist 中特定位置的图像,例如位置 1?
我想在控制器中加载所有图像(以查看所有位置的所有图像)但在视图中我想要 select 具有特定位置的图像。
有:
$playlist->images
我得到了所有相关图像,但我只想要位置列中有“1”的图像。
编辑:
我得到了这个解决方案:
在播放列表中我创建了一个新函数:
public function imagePosition($position) {
return $this->hasMany('Image')->wherePosition($position)->first();
}
现在我可以 select 我视图中的这张图片:
{{$playlist->imagePosition(1)->id}}
这是最好的方法吗?
像这样使用预加载约束;
$playlist = Playlist::with(array('images' => function ($query){
$query->where('position', 1);
}))->find($id);
这将加载播放列表及其图像,但仅加载位置为 1 的图像。
但是如果你想要所有的图片,你可以像这样重新查询结果关系;
$playlist->images()->where('position', 1)->first();
$users = Playlist::with(array('images' => function($query)
{
// the condition that will be apply on the with relation
}))->find($id);
参见 here 的 'Eager Load Constraints' 段
我有两个模型:
播放列表和图片
一个播放列表可以有很多张图片。 一张图片属于一个播放列表。
在 table 图像中,我还创建了一个名为 "position" 的列,其中可以包含 整数。
在Playlist.php中:
public function images(){
return $this->hasMany('Image');
}
在Image.php中:
public function playlist(){
return $this->belongsTo('Playlist');
}
我select一个播放列表型号:
$playlist = Playlist::with('images')->find($id);
问题:
如何 select 我的 $playlist 中特定位置的图像,例如位置 1? 我想在控制器中加载所有图像(以查看所有位置的所有图像)但在视图中我想要 select 具有特定位置的图像。
有:
$playlist->images
我得到了所有相关图像,但我只想要位置列中有“1”的图像。
编辑:
我得到了这个解决方案:
在播放列表中我创建了一个新函数:
public function imagePosition($position) {
return $this->hasMany('Image')->wherePosition($position)->first();
}
现在我可以 select 我视图中的这张图片:
{{$playlist->imagePosition(1)->id}}
这是最好的方法吗?
像这样使用预加载约束;
$playlist = Playlist::with(array('images' => function ($query){
$query->where('position', 1);
}))->find($id);
这将加载播放列表及其图像,但仅加载位置为 1 的图像。
但是如果你想要所有的图片,你可以像这样重新查询结果关系;
$playlist->images()->where('position', 1)->first();
$users = Playlist::with(array('images' => function($query)
{
// the condition that will be apply on the with relation
}))->find($id);
参见 here 的 'Eager Load Constraints' 段