laravel 5带有查询的模型中的自定义方法

时间:2015-07-30 14:14:05

标签: php laravel laravel-5 eloquent

在我的Room对象中,我想获得优先级最低的图片。所以对于我的房间模型我添加了:

public function picture(){
    Return Picture::where('room_id', $this->id)->orderBy('priority', 'asc')->first();
}

在我的控制器中,我将此方法称为:

public function($id){
  $room = Room::findOrFail($id); 
  $room->picture();
}

但是,当我试图在我的观点中得到它时:

 {{$room->picture}}

我收到以下错误:

关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation

的对象

使用{{$ room}}时,我在房间对象中看不到任何图片对象,但应用程序没有崩溃。

1 个答案:

答案 0 :(得分:2)

如果您希望能够获取这样的最新图片,则需要将关系定义放在 pictures()方法中,而不是获取对象。通过这种方式,您将能够利用Eloquent的急切加载;获取具有最低(在值方面)优先级的图片也将非常容易。

将以下内容添加到会议室类:

//relation definition - one to many
public function pictures() {
  return $this->hasMany(Picture::class);
}

//Eloquent getter
public function getPictureAttribute() {
  return $this->pictures()->orderBy('priority', 'asc')->first();
}

现在,您可以通过以下方式轻松访问 $ room 对象上最重要的图片:

$picture = $room->picture;

您可以在此处详细了解如何在模型中设置不同类型的关系:http://laravel.com/docs/5.1/eloquent-relationships