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' 段