laravel get关系hasMany模型with where子句

时间:2015-01-14 13:12:52

标签: php laravel eloquent relationship

我有两种模式:

播放列表图片

播放列表可以包含许多图片。 一张图片属于播放列表。

在表格图像中,我还创建了一个名为“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}}

这是最好的方式吗?

2 个答案:

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