2013-06-28 7 views
1

다른 모델의 세 번째 인덱스 매개 변수가 포함 된 다 대다 관계에 대한 피벗 테이블이 있습니다. 이 모델에 액세스하려면 Eloquent를 사용하고 싶습니다.Laravel 4의 Eloquent에서 다른 모델과의 피벗 모델 데이터 사용

제 애플리케이션에서는 Subjects 및 많은 Semesters을 가질 수있는 User이 있습니다. 사용자가 Subject 인 경우 주어진 Semester에도 속해야합니다. 나는 users, subjectssemesters 테이블뿐만 아니라 subject_user 테이블 (user_id, subject_idsemester_id) 테이블을 가지고 있습니다.

User 과목을 검색 할 때 SessionSubject이 피봇 테이블을 통해 연결되어 있어야합니다.

class User 
{ 
    public function subjects() 
    { 
     $this->belongsToMany('Subject')->withPivot('session_id'); 
    } 
} 

내가 할 수있는 작업은 다음과 같습니다. Session 모델을 사용할 수 있습니다.

$user->subjects()->pivot->semester; 

그런 일이 가능한가, 아니면 이것은 묵시성을 연장해야 할 것인가?

+0

이제까지 해결책을 찾았습니까? 비슷한 문제가 있습니다. –

+1

내 솔루션은 자신의 관계가 정의 된 UserSubject 모델을 사용하는 것이 었습니다. 나는 이것을 Eloquent에서 요청했으나 거절 당했다. 조인 모델은 훌륭한 솔루션이라고 생각합니다. – Dwight

답변

0

확장하려면 Illuminate\Database\Eloquent\Relations\Pivot 확장 클래스를 만들어야합니다. 이 방법은이 피벗을 소유 한 두 모델에 코드를 추가해야하므로 필요할 때 새로운 피벗을 사용할 수 있습니다. https://github.com/laravel/framework/issues/2093#issuecomment-39154456

use Illuminate\Database\Eloquent\Relations\Pivot; 

class SubjectUser extends Pivot { 
    // add your relationships back to User and Subject 
    public function session() { 
     // your relation to session here 
    } 
} 

class Subject extends Eloquent { 
    ... 
    public function newPivot(Eloquent $parent, array $attributes, $table, $exists) { 
     if ($parent instanceof User) { 
      return new SubjectUser($parent, $attributes, $table, $exists); 
     } 
     return parent::newPivot($parent, $attributes, $table, $exists); 
    } 
} 

class User extends Eloquent { 
    ... 
    public function newPivot(Eloquent $parent, array $attributes, $table, $exists) { 
     if ($parent instanceof Subject) { 
      return new SubjectUser($parent, $attributes, $table, $exists); 
     } 
     return parent::newPivot($parent, $attributes, $table, $exists); 
    } 
} 

는 이제 정의 된 그 피벗의 관계에 액세스 할 수 있습니다 :

이 링크는 사용자 정의 피벗 모델의 구현에 대해 설명합니다.

$user->subjects->first()->pivot->session->... 

참고 : 당신은이 클래스와 상호 작용하지 않습니다. 이 두 모델간에 피벗이 필요할 때 기본 피벗 대신 만들어집니다.

Laravel Doc Reference : Working with Pivot Tables에는 사용자 지정 피벗 모델 정의에 대한 간단한 설명이 있습니다.

관련 문제