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

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

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

问题

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

这是模型

type Movie struct {
	ID          int            `json:"id" validate:"number"`
	Title       string         `json:"title"`
	Description string         `json:"description"`
	Year        int            `json:"year"`
	ReleaseDate time.Time      `json:"release_date"`
	Runtime     int            `json:"runtime"`
	Rating      int            `json:"rating"`
	MPAARating  string         `json:"mpaa_rating"`
	CreatedAt   time.Time      `json:"created_at"`
	UpdatedAt   time.Time      `json:"updated_at"`
	MovieGenres map[int]string `json:"-" gorm:"many2many:movie_genres"`
}

type Genre struct {
	ID        int       `json:"-"`
	GenreName string    `json:"genre_name"`
	CreatedAt time.Time `json:"-"`
	UpdatedAt time.Time `json:"-"`
}

type MovieGenre struct {
	ID        int       `json:"id"`
	MovieID   int       `json:"movie_id"`
	GenreID   int       `json:"genre_id"`
	Genre     Genre     `gorm:"foreignKey:GenreID"`
	CreatedAt time.Time `json:"-"`
	UpdatedAt time.Time `json:"-"`
}

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

func (MovieRepositoryImpl *MovieRepositoryImpl) GetMovieById(id int) (*Movie, error) {
	var movie Movie
	err := MovieRepositoryImpl.DB.First(&movie, id).Error
	if err != nil {
		return nil, err
	}

	var movie_genres MovieGenre
	rows, err := MovieRepositoryImpl.DB.Model(&movie_genres).Preload(movie_genres.Genre.GenreName).Rows()
	defer rows.Close()

	genres := make(map[int]string)
	for rows.Next() {
		err := MovieRepositoryImpl.DB.ScanRows(rows, &movie_genres).Error

		if err != nil {
			panic(err)
		}
		genres[movie_genres.ID] = movie_genres.Genre.GenreName
	}

	movie.MovieGenres = genres

	return &movie, nil
}

这是我的期望

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

type Movie struct {
	ID          int            `json:"id" validate:"number"`
	Title       string         `json:"title"`
	Description string         `json:"description"`
	Year        int            `json:"year"`
	ReleaseDate time.Time      `json:"release_date"`
	Runtime     int            `json:"runtime"`
	Rating      int            `json:"rating"`
	MPAARating  string         `json:"mpaa_rating"`
	CreatedAt   time.Time      `json:"created_at"`
	UpdatedAt   time.Time      `json:"updated_at"`
	MovieGenres map[int]string `json:"-" gorm:"many2many:movie_genres"`
}

type Genre struct {
	ID        int       `json:"-"`
	GenreName string    `json:"genre_name"`
	CreatedAt time.Time `json:"-"`
	UpdatedAt time.Time `json:"-"`
}

type MovieGenre struct {
	ID        int       `json:"id"`
	MovieID   int       `json:"movie_id"`
	GenreID   int       `json:"genre_id"`
	Genre     Genre     `gorm:"foreignKey:GenreID"`
	CreatedAt time.Time `json:"-"`
	UpdatedAt time.Time `json:"-"`
}

and this is the code to retrieve data by ID

func (MovieRepositoryImpl *MovieRepositoryImpl) GetMovieById(id int) (*Movie, error) {
	var movie Movie
	err := MovieRepositoryImpl.DB.First(&movie, id).Error
	if err != nil {
		return nil, err
	}

	var movie_genres MovieGenre
	rows, err := MovieRepositoryImpl.DB.Model(&movie_genres).Preload(movie_genres.Genre.GenreName).Rows()
	defer rows.Close()

	genres := make(map[int]string)
	for rows.Next() {
		err := MovieRepositoryImpl.DB.ScanRows(rows, &movie_genres).Error

		if err != nil {
			panic(err)
		}
		genres[movie_genres.ID] = movie_genres.Genre.GenreName
	}

	movie.MovieGenres = genres

	return &movie, nil
}

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:

确定