如何在gorm中向字符串数组追加元素

huangapple go评论81阅读模式
英文:

How to append to the string array in gorm

问题

我正在尝试使用gorm添加数组数据类型。

type Token struct {
  Base
  Tags pq.StringArray `json:"tags" gorm:"type:text[]"`
}

使用以下代码:

t.DB.Model(&database.Token{}).Where("address = ?", address).Update(&database.Token{Tags: []string{"1", "2"}})

但是,我无法将新标签追加到数据中,它会被替换掉。有什么想法吗?

英文:

I am trying to add array data type using gorm

type Token struct {
  Base
  Tags pq.StringArray json:"tags"
}

using

t.DB.Model(&database.Token{}).Where("address = ?", address).Update(&database.Token{Tags: ["1","2"],})

But, I am unable to append a new tag to the data. It is getting replaced..
Any idea??

答案1

得分: 1

你的代码没有追加,而是用["1","2"]替换了Tags字段。
为了将新标签追加到现有标签中,你可以按照以下步骤进行:

// 读取行
t.DB.Model(&database.Token).Where("address = ?", address)
// 追加新标签
newTags := append(database.Token.Tags, "1", "2")
// 更新数据库
t.DB.Model(&database.Token).Update("tags", newTags)

英文:

Your code doesnot append, it replace the Tags field with ["1","2"].
In order to append new tags to existing one, you may proceed like :

// read row
t.DB.Model(&database.Token).Where("address = ?", address)
// append new tags
newTags := append(database.Token.Tags, "1", "2")
// update database
t.DB.Model(&database.Token).Update("tags", newTags)

答案2

得分: 1

mpromonet是否表示您正在替换标签而不是在现有标签上追加。以下是您可以修改现有更新语句使其正常工作的方法:

更新Token结构定义

Tags   pq.StringArray `gorm:"type:text[]" json:"tags"`

使用array_cat函数

t.DB.Model(&database.Token{})
  .Where("address = ?", address)
  .Update("tags", gorm.Expr("array_cat(tags, ?)", pq.Array([]string{"3","4"})))

使用||运算符

t.DB.Model(&database.Token{})
  .Where("address = ?", address)
  .Update("tags", gorm.Expr("tags || ?", pq.Array([]string{"3","4"})))

希望对您有所帮助!

英文:

Has mpromonet stated that you are replacing tag but not appending on the existing tags.
Here how you can modify your existing Update statement to make it work

Update Token struct definition

Tags   pq.StringArray `gorm:"type:text[]" json:"tags"`

With array_cat function

t.DB.Model(&database.Token{})
  .Where("address = ?", address)
  .Update("tags", gorm.Expr("array_cat(tags, ?)", pq.Array([]string{"3","4"})))

With || operator

t.DB.Model(&database.Token{})
  .Where("address = ?", address)
  .Update("tags", gorm.Expr("tags || ?", pq.Array([]string{"3","4"})))

huangapple
  • 本文由 发表于 2021年6月25日 04:10:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/68122214.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定