当前位置: 首页 > 面试题库 >

在beego orm中插入具有M2M的模型

施琦
2023-03-14
问题内容

我有两个模型:

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
}

并使用此代码尝试与一个玩家创建新游戏:

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`

我在文档中找不到用于处理m2m模型的任何特殊规则,并寻求社区的帮助。我应该如何在表格中插入新行?


问题答案:

根据这个,你必须做出一个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)
    }
}

我希望这有帮助。

PS:顺便说一句,您是对的,没有必要指定m2m表的名称。



 类似资料:
  • 我在Laravel5.3中遇到了一个问题,我查看了文档,也搜索了web,但没有找到任何内容。 我使用Laravel关系连接两个表。现在,我希望在用户提交表单后,同时在两个表上插入数据。这里的问题是第一个表是主要的一个说“用户”,第二个说“xyz”属于第一个表。表"xyz"包含连接两个表的"users_id"列。而显然“users_id”是“用户”表的“id”列。 现在问题来了,我想插入数据在用户表

  • 问题内容: 我有本身具有外键的表。列 parentid 是外键, 不能 为NULL。 如果我这样做,那么它说不能将NULL插入 父母的父母 。但是,如果还没有插入行,我可以为它设置什么值呢? 我如何编写将向该表添加行的脚本? 谢谢 问题答案: 技巧:拥有一个带有虚拟密钥的虚拟行,例如99999。将其插入为FK,然后将FK更改为其实际值。并在交易中完成。

  • 问题内容: 我有2张表: 在部门中: numEmpl是主键 numDept是对Departamentos(numDept)的外键引用。在部门中: numDept是主键 numDirect是对Empleados(numEmpl)的外键引用 因此,有一个循环参考。 首先,我创建了表格: 现在,我在它们之间创建引用: 它起作用了,所以现在我尝试插入一些数据: 但是现在它引发了一个错误,告诉我不能在循环引

  • 通常我们主要称之为insert,比如

  • 我在节点js代码中有2个数组 我试着用一个数组来做。它成功地执行了,但它不能与2个数组一起工作。我应该怎么做呢? 我为一个数组编写的Mysql插入查询如下所示:

  • 问:有没有一种方法可以在PostgreSQL表中使用所有列的默认值插入行,而不指定任何列名? 背景:如果我有一个表,其中有两列都有默认值(或者简单地接受NULL),如果我希望行的值是默认值,我可以在插入行时省略列名。例如: 有办法做到这一点还是明令禁止?我找不到这种案子的任何文件。谢了!