> 백엔드 개발 > Golang > GORM의 Place-Town 관계에서 관련 데이터를 효율적으로 가져오는 방법은 무엇입니까?

GORM의 Place-Town 관계에서 관련 데이터를 효율적으로 가져오는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-18 13:40:11
원래의
885명이 탐색했습니다.

How to Efficiently Fetch Associated Data in GORM's Place-Town Relationship?

GORM Golang ORM 연결: 관련 필드 가져오기

Go용 강력한 ORM인 GORM에서는 데이터베이스 테이블을 나타내는 구조체 간의 연결을 생성할 수 있습니다. 이 시나리오에는 각 장소가 하나의 타운에 속하는 타운 구조체와 연결된 장소 구조체가 있습니다.

귀하의 코드는 현재 모든 장소 레코드를 가져오지만 각 장소에 연결된 타운 정보를 포함하려고 합니다. 쿼리 오류는 외래 키 TownID가 Place 구조체에 지정되지 않았다는 것입니다.

이 문제를 해결하려면 Place 구조체를 수정하세요.

type Place struct {
  ID          int
  Name        string
  TownID      int // The foreign key
  Town        Town
}
로그인 후 복사

이제 다음과 같은 여러 옵션이 있습니다. 관련 타운 데이터 검색:

옵션 1: 수동 로드( 권장)

각 장소를 반복하고 Model.Related:

places := []Place{}
db.Find(&places)
for i, _ := range places {
    db.Model(places[i]).Related(&places[i].Town)
}
로그인 후 복사

이 접근 방식은 예상 결과를 생성하는 동안 "N 1" 문제가 발생합니다. " 문제는 각 장소에 대해 여러 데이터베이스 쿼리가 실행되는 경우입니다.

옵션 2: 사전 로드 (권장)

장소 기록을 가져오는 동안 관련 타운을 즉시 로드하려면 사전 로드 기능을 사용하세요.

db.Preload("Town").Find(&places)
로그인 후 복사

이렇게 하면 모든 장소를 가져오는 쿼리와 모든 장소를 가져오는 쿼리, 두 가지 쿼리만 실행됩니다. 관련된 모든 도시를 가져옵니다. 장소와 도시의 수에 따라 잘 확장됩니다.

예상 출력:

[{1 Place1  {1 Town1} 1} {2 Place2  {1 Town1} 1}]
로그인 후 복사

위 내용은 GORM의 Place-Town 관계에서 관련 데이터를 효율적으로 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿