2014-09-08 5 views
0

한 테이블의 기본 키와 인덱싱 된 열 (기본 키가 아닌 관계)을 형성해야하는 상황이 프로젝트에서 발생했습니다) 다른. 나는 다음과 같은 한 내 CourseResource 모델에서Laravel 4에서 다 대다 관계의 다른 열 사용

courses table 
id 
level 

resources table 
id 

courses_resources table 
course_level 
resource_id 

: 잘 작동

public function courses(){ 
    return $this->belongsToMany('Course', 'courses_resources', 'resource_id', 'course_level'); 
} 

다음은 데이터베이스 레이아웃의 샘플입니다.

그런 다음 내 코스 모델에서 내가 가진 :

public function resources(){ 
    return $this->belongsToMany('CourseResource', 'course_resources', 'course_level', 'resource_id'); 
} 

작동하지 않습니다. 데이터베이스에서 수행 된 마지막 쿼리를 보면 Laravel이 코스 ID를 사용하여 course_level 열을 검색하고있는 것 같습니다. 그것은 의미가 있지만,이 관계에 레벨 열을 사용할 수있는 방법이 있습니까?

답변

1

Eloquent BelongsToMany는 PK에 따라 다르므로 그 방법으로는 할 수 없습니다.

기본 키 대신 주어진 필드를 검사 할 사용자 지정 관계 개체가 필요합니다.

빠르고 해키 솔루션이 될 것이다 : 그러나

// Course model 
public function getKey() 
{ 
    $relation = array_get(debug_backtrace(1, 2), '1.object', null); 

    if (method_exists($relation, 'getForeignKey') 
      && $relation->getForeignKey() == 'courses_resources.course_level') 
    { 
     return $this->getAttribute('level'); 
    } 

    return parent::getKey(); 
} 

당신이 생산에 사용 우선 몇 가지 광범위한 테스트를 수행하려는 경우.