2017-08-04 19 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のget mutatorはありますか?そのモデルのgetVotesAttribute()というメソッド? Laravelはあなたがやろうとしているような関係にアクセスするのではなく、それを実行します。

これが当てはまる場合、またはそうでない場合でも、属性の代わりにメソッドを呼び出すことによって、クエリビルダを通じてリレーションにアクセスできます。あなたが探しているのであれば、クエリービルダーを通して実際にはvotesのすべてが読み込まれることはありません。あなたが書いた方法は、すべての投票を読み込み、返されたコレクションをフィルタリングします。

あなたが行うことができ、クエリビルダの使用:、私は `` `votes```にプロパティにアクセスすることができるはず

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

を私ではないでしょうか?私はクラス内ですでに票()の関係を定義しています。これはlaravelのドキュメントでも言及されています。 **関係が定義されると、commentsプロパティにアクセスしてコメントのコレクションにアクセスできます。 Eloquentは「動的プロパティ」を提供しているので、モデル上でプロパティとして定義されているかのようにリレーションシップメソッドにアクセスできます** –

+0

名前が 'votes'で属性がなく、 'getVotesAttribute()'は、モデルがプロパティをリレーションとして解決する前に返ります。 getAttribute()は、アクセスしている属性がモデル上で直接アクセスできない場合に呼び出されます。あなたはそれをここで見ることができますhttps://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php#L295 –

関連する問題