2017-05-19 1 views
0

Laravel (5.4)의 피벗 (중간) 테이블에서 열을 어떻게 만 만들고 필터 결과를 필터링합니까?Laravel (5.4)에서 중간 (피벗) 테이블 열을 필터링/선택하는 방법

Films와 CastAndCrew의 두 가지 모델이 있습니다. CastAndCrew는 영화에서 일하는 다양한 감독, 제작자, 배우입니다. 피벗 테이블은 CastAndCrew 멤버와 필름 사이의 관계 유형을 정의해야합니다. 분명히 누군가가 예를 들어 한 영화의 배우와 다른 영화의 제작자로 구성되어 있으므로 CastAndCrew 테이블의 항목에이 정의를 정의 할 수 없습니다. 이는 한 영화에서만 적용되며 다른 영화에서는 다를 수 있습니다. 그래서 필자는 피벗 테이블에서 관계를 정의해야한다고 가정합니다. 그러나 이것을 정확하게 수행하는 방법을 모르겠습니다. 내가 지금까지있어 :

class Film extends Model 
{ 
    protected $fillable = array('filmtitle', 'description'); 

    public function List_Directors() 
     { 
     return $this->belongsToMany('App\CastAndCrew')->withPivot('type')->wherePivot('type', 'director'); 
     } 

    public function List_Actors() 
     { 
     return $this->belongsToMany('App\CastAndCrew')->withPivot('type')->wherePivot('type', 'actor'); 
     } 
} 

새로운 CastAndCrew 회원 사이트에 추가됩니다

class CastAndCrew extends Model 
{ 
    protected $fillable = array('firstname', 'lastname'); 

    public function List_Films_With_Director() 
     { 
     return $this->belongsToMany('App\Film')->withPivot('type')->wherePivot('type', 'director'); 
     } 

    public function List_Films_With_Actor() 
     { 
     return $this->belongsToMany('App\Film')->withPivot('type')->wherePivot('type', 'actor'); 
     } 
} 

을, 나는, 예를 첨부 방법을 사용하려는거야 새 감독을 추가하는 방법 :

$newcastcrew->CastAndCrew::create(['firstname' => Request::get('firstname'), 'lastname' => Request::get('lastname')]); 

$newcastcrew->List_Films_With_Director()->attach($filmID, ['type' => 'director']); 

1) 맞습니까?

2.) ->withPivot('type')이 피벗 테이블에 '유형'열을 생성합니까? 그렇지 않다면 어떻게 정의해야합니까?

2.) 아마도 절에 Film->List_Directors()의 조항이 해당 영화의 감독 인 CastAndCrew 멤버를 반환합니까? (내가 원하는 것)

고침이 많이 감사합니다!

감사합니다.

+1

모든 것이 괜찮습니다. 아무런 문제가 없습니다. –

답변

1

아이디어와 논리는 완벽합니다. 유형 조건없이 관계를 추가하여 사용자의 모든 필름과 모든 캐스트 및 영화 제작자를 가져올 수 있습니다. 또한 방법과 관계를 더 잘 명명해야합니다. 나는 당신을 위해 코드를 정리했습니다. 원하는 경우 자유롭게 사용하십시오.

class Film extends Model 
{ 
    protected $fillable = array('filmtitle', 'description'); 

    public function castAndCrew() 
    { 
     return $this->belongsToMany('App\CastAndCrew')->withPivot('type'); 
    } 

    public function directors() 
    { 
     return $this->castAndCrew()->wherePivot('type', 'director'); 
    } 

    public function actors() 
    { 
     return $this->castAndCrew()->wherePivot('type', 'actor'); 
    } 
} 

class CastAndCrew extends Model 
{ 
    protected $fillable = array('firstname', 'lastname'); 

    public function films() 
    { 
     return $this->belongsToMany('App\Film')->withPivot('type'); 
    } 

    public function filmsAsDirector() 
    { 
     return $this->films()->wherePivot('type', 'director'); 
    } 

    public function filmsAsActor() 
    { 
     return $this->films()->wherePivot('type', 'actor'); 
    } 
} 
+0

대단히 감사합니다. –