我有以下戈姆。模型和我想查询我的 Postgres 数据库以返回在其 .类别属性,但我不知道如何在 pq 内查询。字符串数组。有解决方法吗?
type Confession struct {
gorm.Model
User string `json:"User"`
Title string `json:"Title"`
Body string `json:"Body"`
Mood string `json:"Mood"`
Categories pq.StringArray `gorm:"type:varchar(64)[]" json:"Categories"`
}
这是我尝试查询的方式,但使用 LIKE 运算符会抛出错误。
if categories != nil {
for _, cat := range categories {
tx = tx.Where("Categories LIKE ?", "%"+cat+"%")
}
}
对数组包含使用<@
。您可以使用*sql.DB
函数进行查询Query
并使用 gorm 中的tx.DB()
获取*sql.DB
sel := "SELECT * FROM confessions WHERE $1 <@ categories"
categories := []string{"cat1", "cat2"}
rows, err := tx.DB().Query(sel, pq.Array(categories))
或者尝试 Gorm Raw SQL ,但我不确定它是否适用于数组函数。
引用:
- PostgreSQL 数组函数在这里
- ProtgreSQL Array 在 golang 中的使用 这里
解决我问题的最简单方法是使用 .其中命令是这样的
tx = tx.Where("categories && ?", pq.Array(categories))
这将返回一个戈姆。数据库,这样我就可以继续链接操作。&&运算符用于检查重叠元素。