gorm [错误] 不支持的数据类型: &map[]

huangapple go评论108阅读模式
英文:

gorm [error] unsupported data type: &map[]

问题

我想使用map创建一个API,但是当我在模型中定义map类型时,出现了不支持的错误消息。

这是模型

  1. type Movie struct {
  2. ID int `json:"id" validate:"number"`
  3. Title string `json:"title"`
  4. Description string `json:"description"`
  5. Year int `json:"year"`
  6. ReleaseDate time.Time `json:"release_date"`
  7. Runtime int `json:"runtime"`
  8. Rating int `json:"rating"`
  9. MPAARating string `json:"mpaa_rating"`
  10. CreatedAt time.Time `json:"created_at"`
  11. UpdatedAt time.Time `json:"updated_at"`
  12. MovieGenres map[int]string `json:"-" gorm:"many2many:movie_genres"`
  13. }
  14. type Genre struct {
  15. ID int `json:"-"`
  16. GenreName string `json:"genre_name"`
  17. CreatedAt time.Time `json:"-"`
  18. UpdatedAt time.Time `json:"-"`
  19. }
  20. type MovieGenre struct {
  21. ID int `json:"id"`
  22. MovieID int `json:"movie_id"`
  23. GenreID int `json:"genre_id"`
  24. Genre Genre `gorm:"foreignKey:GenreID"`
  25. CreatedAt time.Time `json:"-"`
  26. UpdatedAt time.Time `json:"-"`
  27. }

这是通过ID检索数据的代码

  1. func (MovieRepositoryImpl *MovieRepositoryImpl) GetMovieById(id int) (*Movie, error) {
  2. var movie Movie
  3. err := MovieRepositoryImpl.DB.First(&movie, id).Error
  4. if err != nil {
  5. return nil, err
  6. }
  7. var movie_genres MovieGenre
  8. rows, err := MovieRepositoryImpl.DB.Model(&movie_genres).Preload(movie_genres.Genre.GenreName).Rows()
  9. defer rows.Close()
  10. genres := make(map[int]string)
  11. for rows.Next() {
  12. err := MovieRepositoryImpl.DB.ScanRows(rows, &movie_genres).Error
  13. if err != nil {
  14. panic(err)
  15. }
  16. genres[movie_genres.ID] = movie_genres.Genre.GenreName
  17. }
  18. movie.MovieGenres = genres
  19. return &movie, nil
  20. }

这是我的期望

gorm [错误] 不支持的数据类型: &map[]

英文:

I want to create an API using map, but when in models I define map type, it error with message not support

This is Model

  1. type Movie struct {
  2. ID int `json:"id" validate:"number"`
  3. Title string `json:"title"`
  4. Description string `json:"description"`
  5. Year int `json:"year"`
  6. ReleaseDate time.Time `json:"release_date"`
  7. Runtime int `json:"runtime"`
  8. Rating int `json:"rating"`
  9. MPAARating string `json:"mpaa_rating"`
  10. CreatedAt time.Time `json:"created_at"`
  11. UpdatedAt time.Time `json:"updated_at"`
  12. MovieGenres map[int]string `json:"-" gorm:"many2many:movie_genres"`
  13. }
  14. type Genre struct {
  15. ID int `json:"-"`
  16. GenreName string `json:"genre_name"`
  17. CreatedAt time.Time `json:"-"`
  18. UpdatedAt time.Time `json:"-"`
  19. }
  20. type MovieGenre struct {
  21. ID int `json:"id"`
  22. MovieID int `json:"movie_id"`
  23. GenreID int `json:"genre_id"`
  24. Genre Genre `gorm:"foreignKey:GenreID"`
  25. CreatedAt time.Time `json:"-"`
  26. UpdatedAt time.Time `json:"-"`
  27. }

and this is the code to retrieve data by ID

  1. func (MovieRepositoryImpl *MovieRepositoryImpl) GetMovieById(id int) (*Movie, error) {
  2. var movie Movie
  3. err := MovieRepositoryImpl.DB.First(&movie, id).Error
  4. if err != nil {
  5. return nil, err
  6. }
  7. var movie_genres MovieGenre
  8. rows, err := MovieRepositoryImpl.DB.Model(&movie_genres).Preload(movie_genres.Genre.GenreName).Rows()
  9. defer rows.Close()
  10. genres := make(map[int]string)
  11. for rows.Next() {
  12. err := MovieRepositoryImpl.DB.ScanRows(rows, &movie_genres).Error
  13. if err != nil {
  14. panic(err)
  15. }
  16. genres[movie_genres.ID] = movie_genres.Genre.GenreName
  17. }
  18. movie.MovieGenres = genres
  19. return &movie, nil
  20. }

This is my Expect

gorm [错误] 不支持的数据类型: &map[]

答案1

得分: 2

你可以将MovieGenres map[int]string更改为MovieGenres datatypes.JSONMap

英文:

You can change MovieGenres map[int]string to MovieGenres datatypes.JSONMap

huangapple
  • 本文由 发表于 2022年9月7日 12:46:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/73630251.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定