【问题标题】:invalid sql type (slice) for postgrespostgres 的 sql 类型(切片)无效
【发布时间】:2020-11-02 03:54:04
【问题描述】:

我想自动迁移我的模型,但在运行时出现此错误:

invalid sql type (slice) for postgres

这是我的结构:

type Tracking struct {
    ServerID    int64
    Tracks      []map[string]interface{}
}

我正在使用 gorm 来处理数据库。 (github.com/jinzhu/gorm)

错误来自:AutoMigrate(&Tracking{})

有解决办法吗? 已经谢谢了

【问题讨论】:

标签: postgresql go migration go-gorm


【解决方案1】:

简短的回答是gorm,大多数 SQL 数据库不支持将切片作为数据类型。要解决这个问题,您需要告诉 gorm 设置一个 many to many 关系表。

Table1 <----> (Table1/Table2) <----> Table2

我正在尝试同样的事情,gorm documentation 建议了以下内容,它对我有用:

type User struct {
  gorm.Model
  Languages []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
}

我会猜你的:

type Tracking struct {
    ServerID    int64
    Tracks      []Tracks `gorm:"many2many:tracking_tracks;"`
}

type Tracks struct {
    gorm.Model
    Text      string
}

这设置了三个表,如前所述,trackings 表、tracks 表和第三个名为 tracking_tracks 的表将存储 idid 关系(多对多)

重要的是要注意,对于您从一个与另一个表存在关系的表中查询的数据,您需要Preload()这些表。

使用 gorm 示例,您将执行以下操作

var users []User
db.Preload("Languages").Find(&users)

不这样做将返回users,而languages 列为空。

如果many to many 不适合你可以尝试has manyone to many 关系如果更适合https://gorm.io/docs/has_many.html

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2013-10-23
    相关资源
    最近更新 更多