我正在尝试找到一个有条件的行,那就是......
用户有很多个人资料图片,但有一张图片是is_main
所以这就是我写的
public function profile_picture()
{
return $this->hasMany('App\User_profile_picture');
}
public function active_picture()
{
return $this->profile_picture()->find($this->is_main);
}
现在我通过
访问它$picture = Auth::user()->active_picture;
它说
Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation
为了让它发挥作用,我必须做些什么?
答案 0 :(得分:1)
您的代码应为
public function profile_picture()
{
return $this->hasMany('App\User_profile_picture');
}
您缺少退货声明
答案 1 :(得分:0)
您必须使用类:
public function profile_picture()
{
return $this->hasMany(App\User_profile_picture::class);
}
答案 2 :(得分:0)
如果要将Model方法用作属性,则必须返回关系。否则,您需要将其作为()
运算符的方法来调用。与解释here一样。
所以问题的解决方案是:
$picture = Auth::user()->active_picture();
编辑:TIL你也可以设置一个自定义的雄辩访问者:
public function getActivePictureAttribute()
{
return $this->profile_picture()->find($this->is_main);
}
$picture = Auth::user()->active_picture;
是的,你必须在camelCase中编写get ...属性,然后可以使用snake_case / kebab-case或camelCase中的属性。 (参见eloquent $ snakeAttributes布尔变量。)