如何使用列中的切片创建表

时间:2019-03-18 03:57:52

标签: postgresql go go-gorm

我有一个看起来像这样的模型:

type Inventory struct {
    gorm.Model
    LocationID string
    Items      []Item //this is a slice of structs
    Categories []Category //this is a slice of structs
}

使用gorm为它创建表时,没有“项目”或“类别”列。 enter image description here 我想念什么?

1 个答案:

答案 0 :(得分:1)

由于SQL不支持数组的列类型(至少是SQL的大多数版本),gorm不会为slice类型的字段创建列。

但是,您可以在使用关联之后创建关系结构。在这种情况下,has-manymany-to-many都是合适的(虽然可能有很多,但我无法从此示例中看出)。

通过为这些嵌套对象创建单独的表来完成这些工作。在“多对多”关系中,将创建一个单独的项目和类别表,每个表都具有对库存表的外键引用。多对多情况相似,但是使用联接表而不是简单的外键。

例如(使用has-many):

type Inventory struct {
    gorm.Model
    LocationID string
    Items      []Item //this is a slice of structs
    Categories []Category //this is a slice of structs
}

type Item struct {
    // ...
    InventoryId uint
}

type Category struct {
    // ...
    InventoryId uint
}

db.Model(&inventory).Related(&items)
db.Model(&inventory).Related(&categories)