2017-08-04 215 views
0

的变量相当于我在我的应用程序如下雄辩的方法:无法访问雄辩方法

public function votes() { 
     return $this->morphMany(Vote::class, 'votable'); 
    } 

,当我尝试访问变量票(如laravel具有动态特性)像$userVote = $this->votes->where('user_id', $user->id)->first();,我得到以下错误: "Call to a member function where() on integer"当我使用dd($this->votes)它显示2.我都困惑。

我哪里错了?

回答

0

你对votes有没有获得突变?该模型上名为getVotesAttribute()的方法?如果你这样做,Laravel会运行它,而不是像你想要做的那样访问关系。

如果是这种情况,或者即使没有,也可以通过调用方法而不是属性来通过查询生成器访问关系。事实上,如果您只查找一个,查询生成器将不会加载所有的votes。您编写它的方式将加载所有投票,然后筛选返回的集合。

使用查询生成器,你可以这样做:

$this->votes()->where('user_id', $user->id)->first(); 
+0

我应该能够访问属性'''votes''',我不应该?我已经在类中定义了关系票()。这也在laravel文档中提到。 **定义关系后,我们可以通过访问评论属性来访问评论集。请记住,因为Eloquent提供了“动态属性”,所以我们可以访问关系方法,就好像它们被定义为模型中的属性一样。** –

+0

如果您没有名为'votes'的属性并且没有获取命名mutator, 'getVotesAttribute()',因为这些将在模型将该属性解析为关系之前返回。当您访问的属性不能在模型上直接访问时调用'getAttribute()'。你可以在这里看到它https://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php#L295 –