2014-06-12 2 views
0

나는 3 개의 테이블을 가지고 있습니다.belongsToMany 컬렉션에 여분의 테이블을 추가하는 방법 (Laravel Eloquent에서)

사용자 - USER_ID, USER_NAME

follow_album - album_id는

앨범 follower_user_id - album_id을

User Model public function followingAlbum() 
{ 
    return $this->belongsToMany('album','follow_album'); 
} 

$user = user::find(1)->first(); 

$followingAlbum = $user->followingAlbum; 

그래서 지금은 모든 앨범을 가지고 album_creator_user_id 그이 사람이 따라 다니는 경우 컬렉션에 album_creator_us 만 포함되어 있다는 문제가 있습니다. er_id ... 그리고 소유자의 user_name을 얻기 위해 다시 user 테이블에 연결해야합니다. 어떻게해야합니까?

답변

1

먼저, 코드가 실제로 작동하는지 궁금합니다. 중간 테이블의 키는 commmon 규칙을 따르지 않으므로 매개 변수로 관계에 전달해야합니다. 모델이 Album라는 경우

public function followingAlbums() 
{ 
    return $this->belongsToMany('Album','follow_album', 'follower_user_id', 'album_id'); 
} 

는 기억, 그것은 albums라는 이름의 테이블을 찾습니다. 테이블 이름이 album 인 경우 Album 모델에서 해당 속성을 설정해야합니다. 당신이 ->find(1)을 사용한 경우 발견이 항상 한 결과를 반환하기 때문에

class Album extends Eloquent { 
    protected $table = "album"; 
    //... 

그런 다음, ->first()를 호출 할 필요가 없습니다.

앨범을 만든 사용자가 필요한 경우 해당 관계를 앨범 모델에도 추가해야합니다.

class Album extends Eloquent { 
    public class creator() { 
    return $this->belongsTo('User', 'album_creator_user_id'); 
    } 

그런 식으로 앨범을 통해 앨범을 만들 수 있습니다. 사용자가 다음과 같은되어있을 수 많은 앨범 - 당신이

$user = User::find(1); 
$followingAlbums = $user->followingAlbums; 

복수형을보기를했던 것처럼 위에서 귀하의 경우에는 , 당신은 사용자가 다음의 모든 앨범을 얻을 수 있습니다. 다음 예제에서는 첫 번째 앨범과 해당 앨범의 작성자 만 얻습니다.

$user = User::find(1); //retrieve User with id == 1 
$followingAlbum = $user->followingAlbums()->first(); //get the first album he follows 
$creator = $followingAlbum->creator; //the user who created the album 
+0

감사합니다. Mattias. 나는 거의 가지고 있었지만 문제를 해결하는 데 도움을주었습니다. 챔피언! :) – Joe

+0

질문이 하나 더 있습니다 - 내가 어떻게 창조자 정보를 열망 할 수 있는지 생각해보십시오. – Joe

+0

작성자의 정보는 객체를 통해 사용할 수 있습니다. 예 : name에 대한 속성이 있다면 $ creator-> name을 통해 액세스 할 수 있습니다. 또는 $ followingAlbum-> creator-> name (다음 앨범을 만든 사용자의 이름을 말하십시오.) –

관련 문제