我正在构建一个简单的应用程序,让用户将歌曲添加到列表中,并对歌曲进行投票,我正在使用Go构建后端,使用Gorm和Postgres数据库。
以下是我的结构:
type User struct {
gorm.Model
Name string `json:"name"` // Name of user
DisplayName string `json:"displayName"` // Display name of user
Password string `json:"password"` // Password
SongsAdded []Song `json:"songs"` // Songs added by user
}
type Song struct {
gorm.Model
Title string `json:"title"` // Song title
Artist string `json:"artist"` // Song artist
ImageURL string `json:"imageUrl"` // URL to image
UserId uint `json:"userId"` // ID of user that added the song
Likes []User `json:"likes"` // List of users that like the song
Dislikes []User `json:"dislikes"` // List of users that dislike the song
}
字符串
我想跟踪哪个用户将歌曲添加到列表中(因此User
结构体中的SongsAdded
字段和Song
结构体中的UserId
字段)。为了跟踪投票,我想将用户添加到Song
结构中的Likes
或Dislikes
User
片。然而,当我尝试AutoMigrate
时,我得到了这个错误:
invalid field found for struct main.Song's field Likes: define a valid foreign key for relations or implement the Valuer/Scanner interface
型
我想我在同一个结构体中有三个不同的User
引用会让Gorm感到困惑,但我不太确定如何解决这个问题。我想我可以将Likes and Dislikes更改为string
或uint
的切片,并将用户名或用户ID放在那里,但如果引用是针对实际对象,那么我就不必执行额外的数据库搜索,我会更高兴。
有什么建议可以让我重新设计数据结构,或者正确地配置数据结构,使其正常工作?
使用上面的结构,我尝试运行db.AutoMigrate(&User{}, &Song{})
,但是当到达Likes
字段时,我得到一个错误,并且没有创建Song
DB表。
我希望创建这两个表时不会出现错误。
1条答案
按热度按时间shyt4zoc1#
您需要定义多对多关系(每首歌曲可以有许多喜欢/不喜欢的用户,每个用户可以喜欢/不喜欢许多歌曲):
字符串
{\fnSimHei\bord1\shad1\pos(200,288)}
型
参见https://gorm.io/docs/many_to_many.html
然后你需要做一些事情比如
型