2016-09-25 5 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! 매력처럼 일했습니다! 또한 각 태그에 대한 포스터 수를 반환 할 수있는 방법을 보여줄 수 있습니까? 감사. –