2017-08-04 106 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 –