2014-04-07 3 views
1

Laravel의 Eloquent Laravel을 사용하여 다음 관계를 정의하는 가장 좋은 방법을 찾으려고합니다.Laravel ORM 사용자가 선호하는 여러 모델

사용자 테이블과 3 개의 개체 (플레이어, 팀, 리그)가있어서 사용자가 즐겨 찾기로 추가 할 수 있습니다.

사용자 모델과 각 개체가있는 피벗 테이블을 3 개 만들 수 있지만 형식에 관계없이 사용자가 즐겨 찾기를 모두 나열하려면 Union 쿼리를 실행해야합니다.

User 
id 

Favorite 
id 
user_id 
favorited_id (player_id or team_id or league id) 
favorite_type (player , team or league) 

Player 
id 

Team 
id 

League 
id 

여기 내 모델입니다.

https://www.dropbox.com/s/6au8giufaejcghc/Screen%20Shot%202014-04-07%20at%209.06.51%20AM.png

+0

http://laravel.com/docs/queries#unions

나는 다형성은 당신을위한 완벽한 솔루션이 될 것이라고 생각합니다. http://laravel.com/docs/eloquent#polymorphic-relations에서 문서를 확인하십시오. – user3158900

+1

Thanks @ user3158900 설명서를 읽은 후 사용해 보겠습니다. 나는 또한 나의 발견을 게시 할 것이다. – kokus

답변

3

내가는 Favourite 테이블로에게 같은 행동을 할 것입니다. laravel은 이것을 polymorphic relations으로 처리합니다.

당신의 테이블

Favourite 
    favourable_id: int 
    favourable_type: string 

당신이 $player->favourable() 같은 모델의 일반 특성과 같이 호출 것처럼 즐겨 찾기 테이블이 보일 것이다

class Favourite extends Eloquent { 

    public function favourable() 
    { 
     return $this->morphTo(); 
    } 
} 

class Team extends Eloquent { 

    public function favourite() 
    { 
     return $this->morphMany('Favourite', 'favourable'); 
    } 
} 

... 

처럼 보일 수 있습니다.

+0

고마워요. 나는이 제안을 시도 할 것이다. 플레이어를 확장하기 위해 팀 팀을 썼습니다. 그 뜻 이니? – kokus

+0

예, 그것은 웅변 적이어야합니다. 분명히 더 많은 커피가 필요합니다. – zwacky

+1

나는 내가 본 것을 정확하게 설명하는이 최근 기사를 발견했다. 자세한 zwacky의 대답을 설명합니다. http://jordijoan.me/using-polymorphic-relations-laravel/ – kokus

0

다형성을 user3158900에서 제안한대로 사용하거나 Laravel의 쿼리 작성기를 사용하여 Union 쿼리를 수행하는 것이 좋습니다.

$first = DB::table('users')->whereNull('first_name'); 

$users = DB::table('users')->whereNull('last_name')->union($first)->get();