在关联表中插入时创建关联问题

时间:2018-10-16 07:48:00

标签: go go-gorm

type Group struct {
        gorm.Model
        CreatedBy       uint64
        GroupOrders []GroupOrder gorm:"many2many:group_orders;association_jointable_foreignkey:group_id;jointable_foreignkey:group_id;"
    }

    type GroupOrder struct {
        gorm.Model
        GroupID uint64
        OrderID     uint64
        UserID      uint64
        Group       Group

}

我正在尝试插入这样的记录

newGroup: = &Group{
            CreatedBy: newGroupDetails.UserID,
            GroupOrders: []GroupOrder{
                {
                    OrderID:     newGroupDetails.OrderID,
                    UserID:      newGroupDetails.UserID,
                },
            },
        }

我正在使用此创建记录。

db.Create(newGroup)

它在Group模型中正确创建了一条记录,但是在GroupOrder模型中插入时,它在group_id列中插入了NULL值。

之后,它会触发查询

INSERT INTO group_orders (group_id) SELECT ? FROM DUAL WHERE NOT EXISTS (SELECT * FROM group_orders WHERE group_id = ?)[30 30] 1  pkg=mysql

然后在GroupOrder模型中插入另一个记录,其中所有字段均为空,但将组ID字段添加为先前插入的group_order_id值。

mysql中的结果数据

GroupOrder

    | id | group_id | order_id | user_id |
    +----+---------------+----------+---------+
    | 30 |             0 |  8764822 |  678972 |
    | 31 |            30 |     NULL |    NULL |

    | id | created_by |
    +----+------------+
    | 18 |     678972 |

至少,它应该在GroupOrder表的最后一行group_id列中插入18而不是30。

为什么会这样?有人可以解释是否存在错误。

PS:为简便起见,从这两个模型中删除了一些其他列。

1 个答案:

答案 0 :(得分:0)

我自己发现了该错误。 Group与GroupOrder有很多关联,并且数量不多。删除它,它工作干净。

希望它对某人有帮助:)