关系方法必须在 laravel eloquent 中返回一个对象
Posted
技术标签:
【中文标题】关系方法必须在 laravel eloquent 中返回一个对象【英文标题】:Relationship method must return an object in laravel eloquent 【发布时间】:2018-01-17 04:34:06 【问题描述】:我正在尝试查找有条件的行,那就是...
一个用户有很多个人资料图片,但只有一张图片是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
我必须做些什么才能让它发挥作用?
【问题讨论】:
我可能是错的,但一对多的关系不应该与with
函数一起使用吗? laravel.com/docs/5.4/eloquent-relationships#eager-loading
【参考方案1】:
你的代码应该是
public function profile_picture()
return $this->hasMany('App\User_profile_picture');
您缺少返回语句
【讨论】:
对不起,这是一种类型。我忘记写了。 这不是解决方案....Auth::user()->profile_picture
有效但无效 Auth::user()->active_picture
对不起。您是否尝试过调用该访问器,所以 Auth::user()->active_picture();【参考方案2】:
我想你可以试试这个:
public function profile_picture()
return $this->hasMany('App\User_profile_picture');
public function active_picture()
return $this->profile_picture()->find($this->is_main);
希望这对你有用!!!
【讨论】:
【参考方案3】:你必须使用class:
public function profile_picture()
return $this->hasMany(App\User_profile_picture::class);
【讨论】:
【参考方案4】:如果你想使用一个模型方法作为一个属性,它必须返回一个关系。否则,您需要使用 ()
运算符将其作为方法调用。就像解释here。
所以你的问题的解决方案是:
$picture = Auth::user()->active_picture();
编辑:TIL 你也可以设置一个自定义的 eloquent 访问器:
public function getActivePictureAttribute()
return $this->profile_picture()->find($this->is_main);
$picture = Auth::user()->active_picture;
是的,你必须在camelCase中编写get...Attribute,然后才能使用snake_case/kebab-case或camelCase中的属性。 (参见雄辩的 $snakeAttributes 布尔变量。)
【讨论】:
以上是关于关系方法必须在 laravel eloquent 中返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent ORM 无法正确返回模型的关系