Has Many
has many
연관관계는 다른 모델과의 일 대 다 연결을 맺습니다. has one
과는 달리, 소유자는 0개, 혹은 다수의 모델 인스턴스를 가질 수 있습니다.
For example, if your application includes users and credit card, and each user can have many credit cards.
선언
// User has many CreditCards, UserID is the foreign key |
조회
// Retrieve user list with eager loading credit cards |
외부키 오버라이딩
has many
관계를 정의하기위해서는 외부키가 반드시 존재해야합니다. 별도의 설정이 없다면, 외부 키의 이름은 소유자의 타입 이름과 primary key 이름의 조합이 됩니다.
예를들어, User
에 속한 모델을 정의하기위해서는 외부키의 이름이 UserID
가 되어야합니다.
다른 필드를 외부 키로 사용하고자 한다면, foreignKey
태그를 활용해 변경할 수 있습니다. 아래는 그 예시입니다.
type User struct { |
참조 오버라이딩
GORM은 주로 소유자의 primary key를 외부키로 사용합니다. 위 예시에서는 User
의 ID
입니다.
유저에게 크레딧 카드를 할당하고자 한다면, GORM은 유저의 ID
를 크레딧 카드의 UserID
필드에 저장합니다.
references
태그를 활용해 참조될 이름을 바꿀 수 있습니다. 아래는 그 예시입니다.
type User struct { |
Has Many 연관관계를 활용한 CRUD
has many 관계를 활용하려면 연관관계 모드를 참고해주세요.
즉시 로딩
GORM은 Preload
를 활용하여 has many 연관관계의 즉시로딩을 지원합니다. 자세한 내용은 미리 로딩 (즉시 로딩)을 참고해주세요.
자기 참조 Has Many
type User struct { |
외부 키 제약
constraint
태그를 활용해, OnUpdate
, OnDelete
와 같은 제약을 설정할 수 있습니다. 이런 제약들은 GORM 마이그레이션을 할 때 생성됩니다. 아래는 그 예시입니다.
type User struct { |
또한 Has many 연관관계는 Select
를 활용해 선택적으로 삭제될 수 있습니다. 삭제에 관한 자세한 정보는 Select로 삭제하기를 참고해주세요.