2016-09-25 230 views
1

我有一張海報,可以有一個用戶。海報可以有許多標籤,標籤可以有許多海報。現在我想要檢索由特定用戶創建的海報中使用的所有不同標籤。我使用laravel,所以,ORM是雄辯的。如果有人能夠使用雄辯提供給我一個解決方案,那將是非常感謝。我只想檢索標籤。
User類:通過一對多關係檢索多對多關係

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

Poster類:

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

Tag類:

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

回答

1

whereHas方法允許通過相關模型的屬性搜索記錄。它也適用於嵌套關係,因此您可以使用它來搜索給定用戶使用的所有標籤。

下應該做的伎倆:

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

Thansk @ jedrzej.kurylo!像魅力一樣工作!你能否告訴我如何爲每個標籤返回海報數量?謝謝。 –