2016-07-26 8 views
2

PostsHistoryモデルに行がないすべての投稿(Model:Post)を返そうとしています。Laravel relationship `whereNotIn`他のテーブル

私のコードは次のとおりです。

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

public function remaining_posts(){ 
    $history = PostHistory::all()->pluck('id'); 
    return $this->posts->whereNotIn('post_id', $history); 
} 

しかし、私はエラー

[BadMethodCallException]  
    Method whereNotIn does not exist. 

私は関係を通じてremaining_postsを得ることができるか、コントローラのみで行うことができますどのような方法がありますを取得しますか?

答えて

1

編集して、最後の行に:

return $this->posts()->whereNotIn('post_id', $history)->get(); 

すなわち

あなたは posts()postsを変更する必要が
  1. postsは、whereNotIn()メソッドを持たないオブジェクトです。posts()は、whereNotIn()メソッドを定義したIlluminate\Database\Eloquent\Relations\HasManyオブジェクトを返します。

  2. whereNotIn()は、Illuminate\Database\Query\Builderオブジェクトを返します。コレクションを入手するにはget()に電話する必要があります。しかし、フレキシブルで他のBuilderメソッドをremaining_posts()メソッドと連鎖させたい場合は、get()を使用しないでください。

+0

ありがとうございました:) – George

関連する問題