Go-gorm mysql неподдерживаемый тип [] строка, фрагмент строки

Я использую gorm, и пытаюсь создать транзакцию в mysql. У меня есть структура

type Game struct {
    Images []string
}

game := Game{Images: []string{"1.png", "2.png"}}

db := Database()

tx := db.Begin()

if err := tx.Create(&game).Error; err != nil {
    tx.Rollback()
    return errors.New("Cannot add game")
}

tx.Commit()

Но я получаю ошибку (sql: converting argument $1 type: unsupported type []string, a slice of string). Я понимаю, что mysql не поддерживает этот тип, но могу ли я как-нибудь решить эту проблему? Думаю, я могу изменить тип на json.rawMessage, но я думаю, что это неправильный путь.

Я использую диалект "github.com/jinzhu/gorm/dialects/mysql"


person Georgy    schedule 09.09.2018    source источник
comment
Вы можете сохранить его в string, который содержит данные в кодировке JSON, и маршалировать / демаршалировать его при записи / чтении из БД. Однако причина, по которой этот тип не поддерживается, заключается в том, что MySQL не должен использоваться таким образом. Вместо этого у вас должна быть таблица изображений с идентификатором игры и строкой пути или чем-то в этом роде.   -  person Ullaakut    schedule 09.09.2018


Ответы (1)


Если вам нужен список чего-либо в MySql, у вас есть два варианта

  1. Вы можете сериализовать список самостоятельно (в строку с разделителями-запятыми, json или другой формат сериализации) и сохранить его в строке или столбце байтов.
  2. Вы можете использовать соединение, чтобы связать две таблицы.

gorm поддерживает объединения через то, что он называет ассоциациями. В этом случае у вас есть много ассоциаций (http://doc.gorm.io/associations.html#has-many).

Вот пример того, как вы могли бы это сделать:

type Game struct {
    gorm.Model
    GameImages   []GameImage
}

type GameImage struct {
    gorm.Model
    Name string
}

db.Model(&game).Related(&gameImages)
person dolan    schedule 09.09.2018