返回顶部
首页 > 资讯 > 精选 >GORM 中的外键未更新
  • 180
分享到

GORM 中的外键未更新

2024-02-09 13:02:47 180人浏览 独家记忆
摘要

最近在使用GORM时,我发现一个问题——外键未更新的情况。当我在关联的表中更新了外键字段的值时,却没有同步更新到另一张表中。通过调查和研究,我发现这是因为GoRM默认情况下不会自动更新

最近在使用GORM时,我发现一个问题——外键未更新的情况。当我在关联的表中更新了外键字段的值时,却没有同步更新到另一张表中。通过调查和研究,我发现这是因为GoRM默认情况下不会自动更新外键字段。这个问题困扰了我一段时间,所以我决定将解决方法分享给大家。在本文中,我将向大家介绍如何使用GORM来正确更新外键字段,以避免出现这个问题。

问题内容

我有两张桌子,一张是公司

type Company struct {
    Id        uuid.UUID `gorm:"column:id;primaryKey;"`
    CreatedAt time.Time `gorm:"index;column:createdAt"`
    UpdatedAt time.Time `gorm:"index;column:updatedAt"`
    Name      string    `gorm:"column:name" binding:"required"`
}

另一个是product_entitlement

type ProductEntitlement struct {
ID        uuid.UUID
CreatedAt time.Time `gorm:"index;column:createdAt"`
UpdatedAt time.Time `gorm:"index;column:updatedAt"`
Type       string    `gorm:"column:type" binding:"required"`
CompanyID  uuid.UUID `gorm:"column:companyId;size:36"`
Company    Company   `gorm:"foreignKey:CompanyID"`
}

CompanyID 是外键。 CompanyID 包含来自 Company.Id 的值

更新插入完成后,每次都会插入新行。这是我们正在使用的代码

func UpdateEntitlement(c *gin.Context) {
cid := c.Param("companyId")
    id := c.Param("entitlementId")
    eid := uuid.MustParse(id)
    log.Println(eid)
    uid := uuid.MustParse(cid)
    log.Println(uid)
    var entitlementRequest entities.ProductEntitlement
    if err := c.BindJSON(&entitlementRequest); err != nil {
        log.Println(err)
        fmt.Println("ERROR: ", err)
        c.jsON(400, gin.H{"error": "Invalid JSON format"})
        return
    }
    if err := database.DB.Clauses(clause.OnConflict{
        Columns:   []clause.Column{{Name: "id"}},
        UpdateAll: true,
    }).Create(&entitlementRequest).Error; err != nil {
        log.Println(err)
    }
}

但它总是失败并给出错误

BD820BD3F94A2A45E18ED8E8094EF395

如果 ID 存在,我想更新 Product_entitlement,否则创建一个新的

网址如下, Http://localhost:8080/company/{{companyId}}/product/{{companyId}} 并使用 PUT 方法 身体是

{“类型”:“自动”}

解决方法

如果它对某人有帮助,我们可以使用 FirstOrCreate 函数来检查 id 是否存在并进行更新,如果不存在则创建一个新的。

要分配外键,我们需要将值分配给相关表,

entitlementRequest.CompanyID = uid

func UpdateEntitlement(c *gin.Context) {
    cid := c.Param("companyId")
    uid := uuid.MustParse(cid)
    eid := c.Param("entitlementId")
    nid := uuid.MustParse(eid)
    var entitlementRequest entities.ProductEntitlement
    entitlementRequest.CompanyID = uid

    if err := c.BindJSON(&entitlementRequest); err != nil {
        fmt.Println("ERROR: ", err)
        c.JSON(400, gin.H{"error": "Invalid JSON format"})
        return
    }
    if err := database.DB.Where("id = ?", nid).
        Assign(entitlementRequest).
        FirstOrCreate(&entitlementRequest).Error; err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
        return
    }
    c.JSON(http.StatusOK, gin.H{"error": "Product entitlement upserted successfully"})
}

以上就是GORM 中的外键未更新的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: GORM 中的外键未更新

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

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

猜你喜欢
  • GORM 中的外键未更新
    最近在使用GORM时,我发现一个问题——外键未更新的情况。当我在关联的表中更新了外键字段的值时,却没有同步更新到另一张表中。通过调查和研究,我发现这是因为GORM默认情况下不会自动更新...
    99+
    2024-02-09
  • GORM:一张表的两个外键
    在使用GORM进行数据库操作时,我们常常会遇到一张表需要同时关联两个外键的情况。这种情况下,如何正确地设置和使用外键成为了一个需要解决的问题。在本文中,php小编鱼仔将为大家详细介绍如...
    99+
    2024-02-09
  • Gorm 更新并在单个操作中获取更新的行?
    大家好,我们又见面了啊~本文《Gorm 更新并在单个操作中获取更新的行?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能...
    99+
    2024-04-04
  • 外键 gorm 的标签,引用主表
    “纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《外键 gorm 的标签,引用主表》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文...
    99+
    2024-04-04
  • Gorm:无法添加或更新子行 - 外键约束在自引用时失败
    php小编新一在开发过程中,有时会遇到"无法添加或更新子行 - 外键约束在自引用时失败"的错误。这个错误通常发生在数据库中存在自引用的情况下,比如一个表中的某个字段引用了表中的另一个字...
    99+
    2024-02-09
  • Gorm v2 外键上的多对多错误
    亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Gorm v2 外键上的多对多错误》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。问题内容...
    99+
    2024-04-04
  • Gorm 中的更新将created_at、updated_at 作为默认时间
    问题内容 我正在尝试使用 gorm 更新数据库中的实体帖子,更新在数据库中正确反映,但在 gorm 包返回的对象中,created_at 和 Updated_at 字段是默认时间,即“...
    99+
    2024-02-06
  • GORM 无法更新一对多关系中的数据
    php小编苹果在使用GORM框架时,可能会遇到一个常见问题:无法更新一对多关系中的数据。在一对多关系中,我们通常会有一个主表和一个从表,但是在进行更新操作时,GORM可能无法正确处理从...
    99+
    2024-02-10
  • 如何使用 Gorm 将外键添加到模型中
    大家好,今天本人给大家带来文章《如何使用 Gorm 将外键添加到模型中》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!问题内容我...
    99+
    2024-04-04
  • GORM:使用相同的外键定义多个列
    php小编百草今天为大家带来一个有关GORM的问题:如何在GORM中使用相同的外键定义多个列?在数据库设计中,有时我们需要在多个表中使用相同的外键列,这就需要我们在GORM中进行合适的...
    99+
    2024-02-13
  • golang gorm更新日志执行SQL的方法
    这篇文章主要介绍了golang gorm更新日志执行SQL的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang gorm更新日志执行SQL的方法文章都会有所收获,下面我们一起来看...
    99+
    2023-06-30
  • 通过返回切片的值来更新 GORM 中的记录?
    有志者,事竟成!如果你在学习Golang,那么本文《通过返回切片的值来更新 GORM 中的记录?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往...
    99+
    2024-04-05
  • GO - Gin/Gorm/Postgresql - 创建具有“有一个”关联的外键
    php小编草莓为您介绍GO语言中使用Gin、Gorm和PostgreSQL创建具有"有一个"关联的外键的方法。在开发过程中,我们经常会遇到需要建立表之间关联关系的情况。有时候,我们需要...
    99+
    2024-02-09
    go语言
  • vue中内嵌iframe的src更新页面未刷新问题及解决
    目录vue中内嵌iframe的src更新页面未刷新原因解决iframe的src指向的内容不刷新的解决方法之一总结vue中内嵌iframe的src更新页面未刷新 vue中,系统使用if...
    99+
    2022-12-09
    vue内嵌iframe iframe的src更新页面 src更新页面未刷新
  • Java 17 更新后的 strictfp 关键字
    目录strictfp 可能是最没有存在感的关键字了,很多人写了多年 Java 甚至都不知道它的存在。接下来,它也没有必要继续存在了。 上一篇文章Java 17 更快的 LTS 节奏 ...
    99+
    2024-04-02
  • gorm update传入struct对象,零值字段不更新的解决方案
    使用gorm的update接口,出现如果字段为零值 则不会生成字段的更新语句 // Update update attributes with callbacks, refer:...
    99+
    2024-04-02
  • 错误 1452:无法添加或更新子行:外键约束失败
    #1452 - Cannot add or update a child row: a foreign key constraint fails (`goaread`.`views`, CONSTRAINT `views_ib...
    99+
    2023-08-31
    mysql 数据库
  • MySQL中的外键(foreign key)
    阅读目录 前言一、外键作用及其限制条件1 外键的定义2 外键的作用3 外键创建限制 二、外键创建方法1 创建外键的语法2 举例(1)创建两张表(2)创建外键(3)查看表结构 三、验证外键作用1 先向主表中添加数据...
    99+
    2023-08-25
    mysql 数据库 java
  • sql中外键的作用
    外键在 sql 中维护数据完整性和一致性,通过引用另一个表的主键来建立两个表之间的关系。它们强制参照完整性,确保引用记录在被引用表中存在,并触发级联操作,在修改或删除记录时自动更新相关表...
    99+
    2024-05-02
  • Android中的全量更新、增量更新以及热更新
    在客户端开发过程中,我们可能会遇到这样一种需求:点击某个按钮弹出一个弹窗,提示我们可以更新到apk的某个版本,或者我们可以通过服务端接口进行强制更新。在这种需求中,我们是不需要通过应用商店来更新我们的...
    99+
    2023-09-14
    android java android studio
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作