2016-09-25 6 views
1

Ich habe ein Poster, das einen Benutzer haben kann. Das Poster kann viele Tags haben und ein Tag kann viele Poster haben. Jetzt möchte ich alle eindeutigen Tags abrufen, die in den von einem bestimmten Benutzer erstellten Postern verwendet wurden. Ich benutze Laravel, also ist das ORM eloquent. Wenn mir jemand eine eloquente Lösung zur Verfügung stellen könnte, wäre das sehr willkommen. Ich möchte nur die Tags abrufen.
Die User Klasse:Abrufen einer Viele-zu-Viele-Beziehung durch eine zu viele Beziehung

class User extends Model { 
    public function posters() { 
     return $this->hasMany(Poster::class); 
    } 
} 

Die Poster Klasse:

class Poster extends Model { 
    public function user() { 
     return $this->belongsTo(User::class); 
    } 
    public function tags() { 
     return $this->belongsToMany(Tag::class); 
    } 
} 

Die Tag Klasse:

class User extends Model { 
    public function posters() { 
     return $this->belongsToMany(Poster::class); 
    } 
} 

Antwort

1

whereHas Methode erlaubt durch Attribute Aufzeichnungen von verwandten Modellen suchen. Es funktioniert auch mit verschachtelten Relationen, so dass Sie nach allen Tags suchen können, die ein bestimmter Benutzer verwendet.

Folgendes sollte den Trick:

$tags = Tag::whereHas('posters.user', function($query) { 
    $query->whereId($userId); 
})->get(); 
+0

Thansk @ jedrzej.kurylo! Lief wie am Schnürchen! Könnten Sie mir auch zeigen, wie ich die Anzahl der Poster pro Tag zurückgeben kann? Vielen Dank. –

Verwandte Themen