插入与在beego ORM M2M模型

插入与在beego ORM M2M模型

问题描述:

我有两个型号:插入与在beego ORM M2M模型

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 
} 

而与此代码i`am努力创造新的游戏一个玩家:

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) 
    } 

} 

,但它只是创造两个插入游戏和玩家,无需通过“game_players”表进行连接,该表使用orm.RunSyncdb()自动创建。

2016/09/29 22:19:59 Player ID: 1 
[ORM]2016/09/29 22:19:59 -[Queries/default] - [ OK/db.QueryRow/ 11.0ms] - [INSERT INTO "player" ("created", "updated", "nick_name") VALUES ($1, $2, $3) RETURNING "id"] - `2016-09-29 22:19:59.8615846 +1000 VLAT`, `2016-09-29 22:19:59.8615846 +1000 VLAT`, `CoolDude` 
2016/09/29 22:19:59 Game ID: 1 
[ORM]2016/09/29 22:19:59 -[Queries/default] - [ OK/db.QueryRow/ 11.0ms] - [INSERT INTO "game" ("created", "updated") VALUES ($1, $2) RETURNING "id"] - `2016-09-29 22:19:59.8725853 +1000 VLAT`, `2016-09-29 22:19:59.8725853 +1000 VLAT` 

我不能老是找不到任何特殊规则在docs与M2M-模型的工作和寻求帮助社区。我应该如何在表格中插入新行?

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表的名称。