2014-02-11 2 views
12

Laravel에서 Many To Many 관계를 정의 할 때 belongsToMany() 또는 hasManyThrough()를 사용하는 경우의 차이점은 무엇입니까?Laravel의 Many To Many relationships : belongsToMany() 대 hasManyThrough()

예 : Account_User

User Account 따라서, 사용자는 Account_User 테이블을 통해 계정에 여러 관계에 많은있다. 관련 계정이있는 관련 사용자를 정의하는 피벗 테이블 외에도 제공된 계정에 주어진 사용자의 역할을 결정하는 Account_User.role 필드도 저장됩니다.

User belongsToMany() Account 또는 User hasManyThrough() Account Account_User을 사용하면 어떤 영향이 있습니까? 아니면 본질적으로 동일합니까?

방법에 따라 결정될 때, 나는 같은 방법을 역관계 정의에 사용해야한다고 생각합니다.

+0

많은 방법이 귀하의 접근 방식에 적합하지 않습니다. 부정적으로 피봇 테이블에 Eloquent 모델을 추가해야합니다. 내 답변에 언급했듯이, 그들은 다른 것들이며, 예를 들어 많은 통과가 적합하지 않습니다. Account_user는 세 번째 테이블과 달리 계정 및 사용자 테이블의 일부라고 생각하십시오. – Arda

답변

12

의는의는 AB을 부르 자, 당신은 두 가지 모델이 있다고 가정 해 봅시다 : BA 개 이상의 항목이있을 수 있습니다 경우

A 경우 하나 개 이상의 B, 의 항목도 을 가질 수있다 (처럼 생각 블로그 게시물/태그) belongsToMany()을 사용해야합니다.

이제는 A, BC의 3 가지 모델이 있다고 가정 해 보겠습니다.

AB이고, BC과 관련됩니다. (->users ->posts, 당신은 특정 country 모든 post의 필요 countries처럼 생각)

을하지만 당신은 당신이 hasManyThrough() 사용할 필요가 A ( B 이상)에 관련된 모든 C 년대에 접근 할 필요가

hasManyThrough()은 많은 관계를 의미하는 것이 아니라 지름길과 같습니다.

확인 문서 링크, 1, 2 (Laravel 4.2), 또는 3, 4 (Laravel 5.x의).

+1

나는 좀 더 구체적으로 질문을 업데이트했다. 나는 정말로 두 가지 접근 방식에 대한 찬반/반대가 무엇인지 전혀 모르겠다. – preyz

+3

둘 다 다른 일을하기 때문에 장단점이 없습니다. 'belongsManyThrough()'는 단지 'hasMany'의 지름길이기 때문에'countries-> users-> posts' 대신'hasManyThrough()'관계를 설정하면'belongsToMany()'는 피벗 테이블을 포함합니다. 당신은 할 필요가'국가 -> 게시물'; – user3158900