2017-12-19 2 views
2

Ich habe ein Problem mit verwandten Modellen.Mehrere Beziehungen (Pivot) in Laravel

Es gibt drei Modelle. User, PostType (Musik, Tiere) und Post.

Ein Benutzer kann die Posttypen auswählen, die er sehen möchte. Also habe ich eine Pivot-Tabelle posttype_user erstellt. Jetzt kann ich die ausgewählten postTypes binden an einen Benutzer speichern.

// User model 
    public function postTypes() 
    { 
     return $this->belongsToMany(PostType::class); 
    } 

// PostType model 
    public function users() 
    { 
     return $this->belongsToMany(User::class); 
    } 

Das Post-Modell hat einen Fremdschlüssel mit postType_id. Und diese Beziehungen in den Modellen:

// Post model 
    public function postType() 
    { 
     return $this->belongsTo(PostType::class); 
    } 

// PostType model 
    public function post() 
    { 
     return $this->hasMany(Post::class); 
    } 

Jetzt möchte ich alle Beiträge erhalten (der ausgewählten posTypes) aus dem aktuellen Benutzer (Auth :: Benutzer()).

Aber ich weiß nicht wie. Hat jemand eine Idee?

+0

Sie aus der Lektüre https://laravel.com/docs/5.5/eloquent-relationships# beginnen soll Abfrage-Beziehungen –

Antwort

1

können Sie verwenden verschachtelte whereHas():

Post::whereHas('postType', function($q) { 
     $q->whereHas('users', function($q) { 
      $q->where('id', auth()->id()); 
     }); 
    })->get(); 

Oder Sie können dies tun:

$postTypeIds = auth()->user()->postTypes()->pluck('id'); 
$posts = Post::whereIn('post_type_id', $postTypeIds)->get();