>  기사  >  백엔드 개발  >  Gorm: 필드에 구조체를 저장하는 방법

Gorm: 필드에 구조체를 저장하는 방법

WBOY
WBOY앞으로
2024-02-06 08:15:11666검색

Gorm: 필드에 구조체를 저장하는 방법

질문 내용

*hedera.contractid 유형의 hedera 계약 ID를 gorm 필드에 저장하려고 했지만 오류가 발생했습니다. " struct github.com/hashgraph/hedera-sdk-go/v2 잘못된 필드에서 발견되었습니다. 필드 accountid에 대한 aliaskey: 관계에 대한 유효한 외래 키를 정의하거나 평가자 인터페이스를 구현합니다 "

포장계약

으아아아

고름 모델

import (
    "fmt"

    "github.com/.../scanner/controllers/blockchain"
    database "github.com/.../scanner/db"
    model "github.com/.../scanner/models"
    "github.com/rs/xid"
    "gorm.io/gorm"
)

func deploycontract() *gorm.db {

    //connect to database
    db, err := database.connecttodb()

    //if db connection fails
    if err != nil {
        panic(err)
    }

    //init model
    var modelcontract model.contract

    //check if a contract has been deployed
    if err := db.first(&modelcontract); err.error != nil {
        //no deployment found

        //migrate the schema
        db.automigrate(&model.contract{})

        //deploy contract
        contract, _ := blockchain.deploycontract()

        //create record

        // generate random id
        id := xid.new()

        // create
        db.create(&model.contract{
            id:            id.string(),
            contractid:    contract.receipt.contractid,
            gasused:       contract.callresult.gasused,
            transactionid: fmt.sprint(contract.transactionid),
            timestamp:     contract.consensustimestamp,
            chargefee:     fmt.sprint(contract.transactionfee),
            payeraccount:  fmt.sprint(contract.transactionid.accountid),
            status:        fmt.sprint(contract.receipt.status),
        })

    }

    return db
}

정답


맞춤 데이터 유형의 경우 데이터베이스에 값을 저장하고 검색하는 방법을 지정해야 합니다. 이는 scannervaluer 인터페이스를 구현하여 수행됩니다.

그러나 hedera.contractid 是在另一个包中定义的,因此您需要创建自己的 contractid이러한 인터페이스를 구현한 덕분입니다. 다음과 같은 것:

으아아아

또한, 어디에 사용되든 hedera.contractid 转换为 model.contractid될 것입니다. 예:

으아아아

위 내용은 Gorm: 필드에 구조체를 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제