登录
首页 >  Golang >  Go问答

通过返回切片的值来更新 GORM 中的记录?

来源:stackoverflow

时间:2024-03-31 19:18:31 268浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《通过返回切片的值来更新 GORM 中的记录?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

在创建 cli 应用程序时,我遇到了使用 gorm 批量保存数据的问题。

具体来说,使用包含要保存为多对多关系的值的切片。

命令 eddie track mood -q 9 --tags=one,two, three,four -i 会像这样创建静态良好的内容:

two := &schema.record{
    type: "mood",
    quality: 9,
    tags: []schema.tag{
        {name: "one"},{name: "two"},{name: "three"},{name: "four"},
    },
    important: false,
}

但是...使用 for/range 循环,我只选取最后一个(我想这是显而易见的原因),因此 db.create(&two) 返回一个标签,而不是多个。

var t []schema.Tag
for _, v := range tags {
    t = []schema.Tag{{Name: v}}
}
r := &schema.Record{
    Type: "mood",
    Quality: q,
    Tags: t,
    Important: i,
}
database.Create(&r)
fmt.Printf("You rated your mood a %d.\n", q)
fmt.Println("Record ID:", r.ID)
fmt.Println("Tags:", r.Tags)
return err

You rated your mood a 9.
Record ID: 11
Tags: [{four}]

我考虑过的事情:

  • 我不想将“一、二、三、四”保存为单个输入,稍后解析
  • 批量更新不会保留 id、关系(键),因此(根据我的理解)这应该是单个 db.create() 或使用省略,然后立即更新
  • 我是 go 新手(过去 8 年的 php 开发人员),所以我需要一些帮助!
  • 我的结构设置可能不正确?

返回切片值时如何批量更新 gorm 中的记录?


解决方案


目前,我相信我已经找到了解决办法。

func parse(t []string) []schema.tag {

    var tags []schema.tag

    for i := 0; i < len(t); i++ {
        tag := []schema.tag{{name: t[i]}}
        tags = append(tags, tag...)
    }

    return tags
}

这给了我以下输出:

You rated your mood a 9.
Record ID: 28
Tags: [{Stackoverflow} {Code} {SNL} {IASIP} {Excited}]

如果有人有任何要补充的内容,希望能得到一些额外的帮助或讨论。

以上就是《通过返回切片的值来更新 GORM 中的记录?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>