larabel 5.x에서는 많은 수와 속한 수의 비교
왜 언변이 좋은 관계인지 궁금하네요hasMany
와는 다른 시그니처를 가지고 있다.belongsToMany
. 특히 커스텀 조인 테이블 이름 -- 특정 시스템이Comment
다수에 속하다Role
및 소정의Role
많이 가지고 있을 것이다Comment
s, 나는 그 관계를 라는 테이블에 저장하고 싶다.my_custom_join_table
키를 셋업 합니다.comment_key
그리고.role_key
.
return $this->belongsToMany('App\Role', 'my_custom_join_table', 'comment_key', 'role_key'); // works
그러나 반대로 그 커스텀테이블을 정의할 수 없습니다(적어도 문서에서는 언급하지 않습니다).
return $this->hasMany('App\Comment', 'comment_key', 'role_key');
만약 내가 가지고 있다면Role
을 반대하다hasMany
Comments
하지만 그 관계를 저장하기 위해 비표준 테이블 이름을 사용합니다.왜 이 비표준 테이블을 한쪽 방향으로만 사용할 수 있습니까?
hasMany
1대 다의 관계에서 사용되지만belongsToMany
'다수 대 다수 관계'를 말합니다.둘 다 서로 다른 관계 유형이며 각각 다른 데이터베이스 구조가 필요하므로 서로 다른 매개변수를 사용합니다.
중요한 차이점은 일대다 관계에서는 관련 모델에 대응하는 2개의 데이터베이스 테이블만 필요하다는 것입니다.이는 관계에 대한 참조가 소유 모델의 테이블 자체에 저장되기 때문입니다.예를 들어 다음과 같은 경우가 있습니다.Country
모델 및 aCity
모델. 한 나라에는 많은 도시가 있다.그러나 각 도시는 한 나라에만 존재합니다.따라서 해당 국가를 City 모델 자체에 저장합니다.country_id
뭐 그런 거죠).
그러나 Many To Many 관계에는 피벗 테이블이라고 하는 세 번째 데이터베이스 테이블이 필요합니다.피벗 테이블에는 두 모델에 대한 참조가 저장되며 관계 선언에서 두 번째 매개 변수로 선언할 수 있습니다.예를 들어, 이 시스템이City
모델도 있고Car
당신은 각 도시에서 사람들이 운전하는 차의 종류를 보여주는 관계를 원한다.음, 한 도시에서 사람들은 많은 다른 종류의 차를 운전할 것이다.하지만, 만약 여러분이 한 종류의 차를 본다면, 여러분은 또한 그것이 많은 다른 도시에서 운전될 수 있다는 것을 알게 될 것입니다.따라서 저장하기가 불가능할 것입니다.city_id
또는car_id
두 모델 모두 1개 이상일 수 있기 때문입니다.따라서 이러한 참조를 피벗 테이블에 넣습니다.
경험으로 볼 때,belongsToMany
관계, 다른 관계와만 쌍을 이룰 수 있습니다.belongsToMany
세 번째 피벗 테이블이 있음을 의미합니다.「 」를 하는 경우hasMany
관계, 이 관계는 a와만 쌍으로 만들 수 있습니다.belongsTo
관계 및 추가 데이터베이스 테이블이 필요하지 않습니다.
예에서는 .belongsToMany
외부 키 및 로컬 키와 함께 커스텀 테이블을 다시 추가합니다(다른 모델의 주문 참조).
텍스트와 그림으로 이해하도록 하세요.
일대일 관계:
- 사용자는 하나의 프로파일을 가질 수 있습니다.따라서 프로파일은 한 사용자의 것입니다.
1 대 다(has Many):
- 사용자는 많은 기사를 가지고 있다.그래서 많은 글들이 한 사용자의 것이다.
다대다(BelongsToMany):
- 사용자는 여러 포럼에 속할 수 있습니다.그래서 포럼은 많은 사용자들의 것이다.
언급URL : https://stackoverflow.com/questions/36208460/hasmany-vs-belongstomany-in-laravel-5-x
'sourcecode' 카테고리의 다른 글
독트린 하이드레이션이 뭐죠? (0) | 2022.11.27 |
---|---|
null이 PHP의 한 줄에 다른 변수를 사용하는 경우 (0) | 2022.11.27 |
Jackson은 캐스팅 없이 JsonNode를 ArrayNode로 전환하는 방법을 알고 계십니까? (0) | 2022.11.27 |
C#, C++ 또는 Java 컴파일러를 구동하여 1+2+3+를 계산하는 방법...컴파일 시 +1000? (0) | 2022.11.27 |
MariaDB ODBC 커넥터 성능 문제 (0) | 2022.11.27 |