Как создать таблицу с ломтиками в столбцах - PullRequest
0 голосов
/ 18 марта 2019

У меня есть модель, которая выглядит так:

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

Когда я создаю для него таблицу с помощью gorm, у меня нет столбцов для Items или Categories. enter image description here Что мне не хватает?

1 Ответ

1 голос
/ 18 марта 2019

Поскольку массивы не поддерживаются типами столбцов в SQL - по крайней мере, в большинстве версий SQL - gorm не будет создавать столбцы для полей типа slice.

Вы можете, однако, создать структуру отношений после использования ассоциации. В этом случае подойдет has-many или many-to-many (я не могу сказать из этого примера, хотя, скорее всего, has-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)
...