ホームページ  >  記事  >  バックエンド開発  >  Gorm: 構造体をフィールドに保存する方法

Gorm: 構造体をフィールドに保存する方法

WBOY
WBOY転載
2024-02-06 08:15:11735ブラウズ

Gorm: 構造体をフィールドに保存する方法

質問内容

*hedera.contractid タイプの hederea コントラクト ID を gorm フィールドに保存しようとしましたが、エラー「」が表示されました。 struct github.com/hashgraph/hedera-sdk-go/v2 は無効なフィールドが見つかりました。accountid のフィールド エイリアスキー: 関係の有効な外部キーを定義するか、valuer インターフェイスを実装してください

梱包契約

リーリー

ゴームモデル

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
}

正解


カスタム データ型の場合、値をデータベースに保存およびデータベースから取得する方法を指定する必要があります。これは、scanner および valuer インターフェイスを実装することによって行われます。

ただし、hedera.contractid は別のパッケージで定義されているため、独自の contractid を作成し、これらのインターフェイスを実装する必要があります。このようなもの: ### リーリー

さらに、

hedera.contractid は、どこで使用されても model.contractid に変換されます。例えば:### リーリー

以上がGorm: 構造体をフィールドに保存する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。