2017-08-09 40 views
0

我试图找到条件的行,这是返回一个对象...关系法必须laravel雄辩

用户有很多的个人资料照片,但有一个画面是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

我可能是错的,但不是一对多关系假设使用'with'函数? https://laravel.com/docs/5.4/eloquent-relationships#eager-loading –

回答

0

你的代码应该是

public function profile_picture() 
{ 
    return $this->hasMany('App\User_profile_picture'); 
} 

你缺少return语句

+0

对不起,这是一种类型。我忘了写。 – Alen

+0

这不是解决方案....'Auth :: user() - > profile_picture'它的工作原理,但不是'Auth :: user() - > active_picture' – Alen

+0

对不起。你有没有尝试调用该访问器,所以Auth :: user() - > active_picture(); –

0

我想你可以试试这个:

public function profile_picture() 
{ 
    return $this->hasMany('App\User_profile_picture'); 
} 

public function active_picture() 
{ 
    return $this->profile_picture()->find($this->is_main); 
} 

希望这对你的工作!

0

您必须使用

public function profile_picture() 
{ 
    return $this->hasMany(App\User_profile_picture::class); 
} 
0

如果你想使用一个模型方法作为一个属性,它返回一个关系。否则,您需要将其作为()运算符的方法调用。像解释here一样。

所以解决你的问题应该是:

$picture = Auth::user()->active_picture(); 

编辑:直到你还可以设置自定义雄辩访问:

public function getActivePictureAttribute() 
{ 
    return $this->profile_picture()->find($this->is_main); 
} 

$picture = Auth::user()->active_picture; 

是的,你必须写得到...使用camelCase中的属性,然后可以使用snake_case/kebab-case或camelCase中的属性。 (请参阅雄辩的$ snakeAttributes布尔变量。)