返回顶部
首页 > 资讯 > 精选 >Gorm:如何在字段中存储结构
  • 771
分享到

Gorm:如何在字段中存储结构

2024-02-06 07:02:34 771人浏览 八月长安
摘要

问题内容 我试图将 *hedera.contractid 类型的 hederea 合约 id 保存到 gORM 字段中,但收到错误“为 struct GitHub.com/hashgr

问题内容

我试图将 *hedera.contractid 类型的 hederea 合约 id 保存到 gORM 字段中,但收到错误“为 struct GitHub.com/hashgraph/hedera-sdk-Go/v2 找到了无效字段。 accountid的字段aliaskey:为关系定义有效的外键或实现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
}

gorm模型

package models

import (
    "time"

    "github.com/hashgraph/hedera-sdk-go/v2"
    "gorm.io/gorm"
)

type Contract struct {
    gorm.Model
    Id            string
    ContractId    *hedera.ContractID
    GasUsed       uint64
    TransactionId string
    Timestamp     time.Time
    ChargeFee     string
    PayerAccount  string
    Status        string
}


正确答案


对于自定义数据类型,您需要指定如何在数据库中存储和检索该值。这是通过实现 scannervaluer 接口来完成的。

但是,由于 hedera.contractid 是在另一个包中定义的,因此您需要创建自己的 contractid 并实现这些接口。像这样的事情:

type contractid hedera.contractid

type contract struct {
    gorm.model
    id            string
    contractid    *contractid
    gasused       uint64
    transactionid string
    timestamp     time.time
    chargefee     string
    payeraccount  string
    status        string
}     

func (c *contractid) scan(value interface{}) error {
  bytes, ok := value.([]byte)
  if !ok {
    return errors.new(fmt.sprint("failed to unmarshal contractid value:", value))
  }

  return JSON.unmarshal(bytes, c)
}

func (c contractid) value() (driver.value, error) {
  return json.marshal(c)
}

此外,无论使用什么地方,都将 hedera.contractid 转换为 model.contractid 。例如:

cID := model.ContractID(*contract.Receipt.ContractID)

    // Create
    db.Create(&model.Contract{
        Id:            id.String(),
        ContractId:    &cID,
        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),
    })

以上就是Gorm:如何在字段中存储结构的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Gorm:如何在字段中存储结构

本文链接: https://lsjlt.com/news/561302.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Gorm:如何在字段中存储结构
    问题内容 我试图将 *hedera.contractid 类型的 hederea 合约 id 保存到 gorm 字段中,但收到错误“为 struct github.com/hashgr...
    99+
    2024-02-06
  • 如何在MySQL中使用存储结构
    这期内容当中小编将会给大家带来有关如何在MySQL中使用存储结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.新建两张数据表:student1, student2新建...
    99+
    2024-04-02
  • 如何在元帅中省略结构的条件字段
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何在元帅中省略结构的条件字段》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内容...
    99+
    2024-04-05
  • navicat如何看表结构字段
    这篇文章主要介绍navicat如何看表结构字段,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如何在navicat中查看表结构1、第一步操作就是打开Navicat for MySQL主...
    99+
    2024-04-02
  • 在Python中如何存储字符串
    这篇文章主要介绍“在Python中如何存储字符串”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在Python中如何存储字符串”文章能帮助大家解决问题。unicode 的三种编码从Python3开始,...
    99+
    2023-06-30
  • 如何在 Go 中使用 json.Marshal 外部结构并排除空字段?
    各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《如何在 Go 中使用 json.Marshal 外部结构并排除空字段?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉...
    99+
    2024-04-04
  • 如何使查询结果结构与我在 GORM Select 上声明的结构相匹配
    本篇文章给大家分享《如何使查询结果结构与我在 GORM Select 上声明的结构相匹配》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读...
    99+
    2024-04-05
  • 如何在另一个结构体中使用结构体字段而不将其引用为键
    在PHP的开发中,经常会遇到在一个结构体中使用另一个结构体字段的情况。然而,直接将其引用为键可能会造成代码的混乱和不易维护。那么如何在另一个结构体中使用结构体字段呢?php小编百草为大...
    99+
    2024-02-10
  • oracle如何修改表结构字段长度
    要修改表结构字段长度,可以使用ALTER TABLE语句来实现。 例如,如果要将表名为example_table的字段名为examp...
    99+
    2024-04-09
    oracle
  • 如何寻找结构体中未设置值的字段
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何寻找结构体中未设置值的字段》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看...
    99+
    2024-04-04
  • 我如何解组 JSON 数据并将其存储在 Go 中的结构中
    php小编草莓分享一种解组JSON数据并将其存储在Go语言结构中的方法。JSON是一种常用的数据交换格式,Go语言提供了方便的解析和处理JSON数据的工具包。通过使用Go语言内置的"j...
    99+
    2024-02-11
    go语言
  • 如何在Mysql中已存在的表中增加字段
    文章目录 前言语法变量含义 前言 我们在开发过程中总会遇到维护其他项目,这个时候有了新的需求,就会出现一种情况,那就是为已经存在的表中添加新的字段。 由于表中有数据存在,不能使用dro...
    99+
    2023-10-24
    mysql 数据库 sql
  • 如何在 slog 记录器中传递结构并自动使用其字段?
    问题内容 我正在使用 slog 包。我面临的问题是,当我在结构中拥有大部分参数时,我必须向其传递太多参数。 有没有办法修改处理程序以使用这个结构? 就像你可以在 python 中执行的...
    99+
    2024-02-06
  • oracle如何查询存储过程中用到哪些字段
    oracle 提供查询存储过程字段的方法:连接数据库。运行查询:“select object_name, argument_name, data_type from user_...
    99+
    2024-04-19
    oracle
  • golang中如何按照结构体的某个字段排序
    本文小编为大家详细介绍“golang中如何按照结构体的某个字段排序”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang中如何按照结构体的某个字段排序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概述gol...
    99+
    2023-06-30
  • 如何理解C语言数据结构中线性表的链式存储结构
    如何理解C语言数据结构中线性表的链式存储结构,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.什么是线性表的链式存储结构 —链表存储结点:包括元素本身的信息,还有元素之间的关系...
    99+
    2023-06-21
  • Mysql如何通过Adjacency List存储树形结构
    这篇文章主要介绍Mysql如何通过Adjacency List存储树形结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如何在数据库中存储树形结构呢?像mysql这样的关系型数据库,...
    99+
    2024-04-02
  • 简化 JSON 响应中的结构字段
    今天编程网给大家带来了《简化 JSON 响应中的结构字段》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支...
    99+
    2024-04-04
  • 使用其他“部分”结构中的值覆盖结构字段
    php小编西瓜在这里为大家介绍一个有关使用其他“部分”结构中的值覆盖结构字段的方法。在编程中,我们经常需要根据不同的情况来更新结构字段的值。这种情况下,我们可以使用其他结构中的值来覆盖...
    99+
    2024-02-12
  • mysql如何修改表结构(altertable),多列/多字段
    目录mysql修改表结构(alter table),多列/多字段mysql alter table修改表结构添加多个字段的几个写法分开写多个 alter table合并写在一起总结m...
    99+
    2022-12-21
    mysql修改表结构 mysql alter table mysql修改表alter table
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作