猿问

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

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中的结果数据


团购


    | 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:为简洁起见,从两个模型中删除了一些其他列。


catspeake
浏览 120回答 1
1回答

肥皂起泡泡

自己发现了错误。Group 与 GroupOrder 具有多对多关联。删除它并且它工作干净。希望它能帮助别人:)
随时随地看视频慕课网APP

相关分类

Go
我要回答