Postgresql 如何创建列中包含切片的表

Postgresql 如何创建列中包含切片的表,postgresql,go,go-gorm,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为它创建表时,我没有项目或类别的列。 我错过了什么 由于数组在SQL中不受支持,所以大多数SQL版本至少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为它创建表时,我没有项目或类别的列。
我错过了什么

由于数组在SQL中不受支持,所以大多数SQL版本至少gorm不会为类型为slice的字段创建列

但是,您可以在使用关联后创建关系结构。在这种情况下,或是合适的(我不能从这个例子中判断,尽管可能有很多)

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

例如(具有多个):


检查是否在数据库中创建了任何单独的映射表。切片不能本机存储在数据库中,因此GORM在创建表时跳过它们是有意义的。我希望使用满足接口的类型会改变GORM的行为,但这只是猜测(因此是注释,而不是答案)。如果您可以/想要使用,它会为最常见的类型提供数组(
pq.StringArray
pq.bytearray
等)1.谢谢你的回答@henry woody那不就让我把表格连起来吗?我需要切片的索引,这样我才能知道顺序。每个位置可能有不同的项目和类别顺序。“数组在SQL中不受支持的列类型”:JSON接近;许多SQL引擎都支持它(PostgreSQL、SQLite、MySQL、MariaDB等),我认为您可以通过两种方式实现这一点:-或者将索引值为列的所有项目和类别存储起来,然后在获取时对它们进行排序-如果您有固定的项目和类别。。可能为库存项目、库存类别创建一个单独的映射表,并使用索引值存储每个映射,您可以使用索引值排序或获取位置。
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)