2016-07-26 6 views
2

Ich versuche, alle Posts (Model: Post), die keine Zeile im PostsHistory Modell haben, zurückzugeben.Laravel Beziehung `whereNotIn` andere Tabelle

Mein Code ist:

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

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

Aber ich erhalte eine Fehlermeldung

[BadMethodCallException]  
    Method whereNotIn does not exist. 

Gibt es eine Möglichkeit, die remaining_posts durch eine Beziehung bekommen konnte oder kann nur in der Steuerung durchgeführt werden?

Antwort

1

Bearbeiten Sie Ihre letzte Zeile:

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

heißt

  1. Sie müssen posts zu posts() ändern. posts ist ein Illuminate\Database\Eloquent\Collection Objekt, das keine whereNotIn() Methode hat, wobei posts() ein Illuminate\Database\Eloquent\Relations\HasMany Objekt zurückgibt, das whereNotIn() Methode definiert hat.

  2. whereNotIn() gibt ein Objekt Illuminate\Database\Query\Builder zurück. Sie müssen also get() anrufen, um eine Sammlung zu erhalten. Aber wenn Sie möchten, dass die Flexibilität andere Builder Methoden mit Ihrer remaining_posts() Methode zu verketten, verwenden Sie nicht get().

+0

Danke für die Erklärung :) – George