sourcecode

larabel 5.x에서는 많은 수와 속한 수의 비교

copyscript 2022. 11. 27. 21:22
반응형

larabel 5.x에서는 많은 수와 속한 수의 비교

왜 언변이 좋은 관계인지 궁금하네요hasMany와는 다른 시그니처를 가지고 있다.belongsToMany. 특히 커스텀 조인 테이블 이름 -- 특정 시스템이Comment다수에 속하다Role및 소정의Role많이 가지고 있을 것이다Comments, 나는 그 관계를 라는 테이블에 저장하고 싶다.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하지만 그 관계를 저장하기 위해 비표준 테이블 이름을 사용합니다.왜 이 비표준 테이블을 한쪽 방향으로만 사용할 수 있습니까?

hasMany1대 다의 관계에서 사용되지만belongsToMany'다수 대 다수 관계'를 말합니다.둘 다 서로 다른 관계 유형이며 각각 다른 데이터베이스 구조가 필요하므로 서로 다른 매개변수를 사용합니다.

중요한 차이점은 일대다 관계에서는 관련 모델에 대응하는 2개의 데이터베이스 테이블만 필요하다는 것입니다.이는 관계에 대한 참조가 소유 모델의 테이블 자체에 저장되기 때문입니다.예를 들어 다음과 같은 경우가 있습니다.Country모델 및 aCity모델. 한 나라에는 많은 도시가 있다.그러나 각 도시는 한 나라에만 존재합니다.따라서 해당 국가를 City 모델 자체에 저장합니다.country_id뭐 그런 거죠).

그러나 Many To Many 관계에는 피벗 테이블이라고 하는 세 번째 데이터베이스 테이블이 필요합니다.피벗 테이블에는 두 모델에 대한 참조가 저장되며 관계 선언에서 두 번째 매개 변수로 선언할 수 있습니다.예를 들어, 이 시스템이City모델도 있고Car당신은 각 도시에서 사람들이 운전하는 차의 종류를 보여주는 관계를 원한다.음, 한 도시에서 사람들은 많은 다른 종류의 차를 운전할 것이다.하지만, 만약 여러분이 한 종류의 차를 본다면, 여러분은 또한 그것이 많은 다른 도시에서 운전될 수 있다는 것을 알게 될 것입니다.따라서 저장하기가 불가능할 것입니다.city_id또는car_id두 모델 모두 1개 이상일 수 있기 때문입니다.따라서 이러한 참조를 피벗 테이블에 넣습니다.

경험으로 볼 때,belongsToMany관계, 다른 관계와만 쌍을 이룰 수 있습니다.belongsToMany세 번째 피벗 테이블이 있음을 의미합니다.「 」를 하는 경우hasMany관계, 이 관계는 a와만 쌍으로 만들 수 있습니다.belongsTo관계 및 추가 데이터베이스 테이블이 필요하지 않습니다.

예에서는 .belongsToMany외부 키 및 로컬 키와 함께 커스텀 테이블을 다시 추가합니다(다른 모델의 주문 참조).

텍스트와 그림으로 이해하도록 하세요.

  1. 일대일 관계:

    • 사용자는 하나의 프로파일을 가질 수 있습니다.따라서 프로파일은 한 사용자의 것입니다.
  2. 1 대 다(has Many):

    • 사용자는 많은 기사를 가지고 있다.그래서 많은 글들이 한 사용자의 것이다.
  3. 다대다(BelongsToMany):

    • 사용자는 여러 포럼에 속할 수 있습니다.그래서 포럼은 많은 사용자들의 것이다.

    관계.

언급URL : https://stackoverflow.com/questions/36208460/hasmany-vs-belongstomany-in-laravel-5-x

반응형