我有两种模式:
onCloseDocument()
使用此代码,我试图与一名玩家一起制作新游戏:
type MainFields struct {
Id int `orm:"auto"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`
}
type Game struct {
MainFields
Players []*Player `orm:"rel(m2m)"`
}
type Player struct {
MainFields
Games []*Game `orm:"reverse(many)"`
NickName string
}
但它只为游戏和玩家创建了两个插件,而没有通过" game_players"使用func insertTestData() {
var playerA models.Player
playerA.NickName = "CoolDude"
id, err := models.ORM.Insert(&playerA)
if err != nil {
log.Printf(err.Error())
} else {
log.Printf("Player ID: %v", id)
}
var game models.Game
game.Players = []*models.Player{&playerA}
id, err = models.ORM.Insert(&game)
if err != nil {
log.Printf(err.Error())
} else {
log.Printf("Game ID: %v", id)
}
}
自动创建的表。
orm.RunSyncdb()
我找不到在docs中使用m2m-models的任何特殊规则,并向社区寻求帮助。我该如何在表中插入新行?
答案 0 :(得分:0)
根据this,你必须在创建对象游戏后创建一个m2m对象,如下所示:
m2m := models.ORM.QueryM2M(&game, "Players")
而不是game.Players = []*models.Player{&playerA}
,你写道:
num, err := m2m.Add(playerA)
所以,你的功能必须如下:
func insertTestData() {
var playerA models.Player
playerA.NickName = "CoolDude"
id, err := models.ORM.Insert(&playerA)
if err != nil {
log.Printf(err.Error())
} else {
log.Printf("Player ID: %v", id)
}
var game models.Game
id, err = models.ORM.Insert(&game)
if err != nil {
log.Printf(err.Error())
} else {
log.Printf("Game ID: %v", id)
}
m2m := o.QueryM2M(&game, "Players")
num, err := m2m.Add(playerA)
if err == nil {
log.Printf("Added nums: %v", num)
}
}
我希望这会有所帮助。
P.S。:顺便说一下,你是对的,没有必要指定m2m表的名称。