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

Php 带查询的模型中的laravel 5自定义方法,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,在我的房间对象中,我希望获得优先级最低的图片。因此,我在我的房间模型中添加了: public function picture(){ Return Picture::where('room_id', $this->id)->orderBy('priority', 'asc')->first(); } 在我的控制器中,我将此方法称为: public function($id){ $room = Room::findOrFail($id); $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}}
我得到以下错误:

关系方法必须返回类型为illumb\Database\Eloquent\Relations\Relations的对象


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

如果您希望能够像这样获取最新图片,则需要在pictures()方法中放置关系定义,而不是获取对象。这样,你就可以利用雄辩者的热切负载;获取具有最低优先级(价值方面)的图片也将非常容易

将以下内容添加到您的房间课程中:

//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;

您可以在此处阅读有关如何在模型中设置不同类型关系的更多信息:

我认为这样做是不好的做法,因为现在您选择了“全部”而不是“筛选”而不是“选择一个”,还是我错了?否。在查询生成器上调用first(),并将“限制1”添加到查询中,因此,只有一个对象从database@jedrzej.kuylo我得到以下错误:Relationship方法必须返回类型为illumb\Database\elount\Relations\RelationWhere的对象?pictures()正在返回Relation对象,可能您有一些其他关系定义不正确?可以粘贴模型代码吗?是否删除了原始的“picture()”方法?它导致了这样的错误,如果它还在的话,那就是原因。移除它