>  기사  >  백엔드 개발  >  상위 구조체와 동일한 테이블 내에서 GORM에 임베디드 구조체를 저장하는 방법은 무엇입니까?

상위 구조체와 동일한 테이블 내에서 GORM에 임베디드 구조체를 저장하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-03 06:08:02718검색

How to Store Embedded Structs in GORM within the Same Table as the Parent Struct?

데이터 저장을 위해 GORM에 구조체 삽입

GORM에서 중첩 구조체를 저장하려는 경우 내장 구조체를 처리하는 것이 어려울 수 있습니다. 상위 구조체와 동일한 테이블. 기본적으로 GORM은 내장된 구조체를 별도의 엔터티로 가정하고 이를 위한 새 테이블을 생성하려고 시도합니다. 그러나 포함된 구조체를 상위 구조체 테이블 내의 추가 필드로 포함하는 것을 선호할 수도 있습니다.

해결책

효과적인 솔루션 중 하나는 Scan() 및 Value를 구현하는 것입니다. () 포함된 구조체 배열을 나타내는 사용자 정의 유형에 대한 메서드입니다. 이러한 방법을 사용하면 GORM이 JSON에 포함된 구조체를 직렬화 및 역직렬화하여 원활한 저장 및 검색이 가능합니다.

설명을 위해 다음 예를 고려하십시오.

<code class="go">type Child struct {
    Lat float64
    Lng float64
}

type ChildArray []Children

func (sla *ChildArray) Scan(src interface{}) error {
    return json.Unmarshal(src.([]byte), &sla)
}

func (sla ChildArray) Value() (driver.Value, error) {
    val, err := json.Marshal(sla)
    return string(val), err
}</code>

여기서 ChildArray 사용자 정의 type은 하위 구조체의 포함된 배열을 나타냅니다. JSON 직렬화 및 역직렬화를 처리하기 위해 Scan() 및 Value() 메서드를 구현합니다.

부모 구조체에 ChildArray를 포함하고 저장하려면 다음과 같이 모델을 정의할 수 있습니다.

<code class="go">type Parent struct {
    *gorm.Model
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}</code>

이 구성을 사용하면 GORM은 Childrens 필드를 사용자 정의 유형으로 인식하고 데이터베이스와 상호 작용할 때 JSON에 포함된 Child 구조체를 자동으로 직렬화 및 역직렬화합니다.

위 내용은 상위 구조체와 동일한 테이블 내에서 GORM에 임베디드 구조체를 저장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.