Go-gorm mysql "неподдерживаемая строка типа [], фрагмент строки" - PullRequest
0 голосов
/ 09 сентября 2018

Я использую 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"

1 Ответ

0 голосов
/ 09 сентября 2018

Если вам нужен список чего-либо в 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)
...