根据文档和gorm repo的问题,db.Create是插入记录。db.NewRecord仅检查当前值是否具有主键。因此,请勿插入记录。

我在下面的代码下面写了。
但是我可以用db.Createdb.NewRecord插入记录。

这两种方法有何不同?

for _, v := range oneday.Onedays {
    if err := tx.Create(&v).Error; err != nil {
        tx.Rollback()
        return model.ResOnedays{}, err
    }

    // Photos
    for i, pv := range v.Photos {
        res := tx.NewRecord(&pv)
    }

    // Tags
    for _, tv := range v.Tags {
        tx.NewRecord(&tv)
    }
}

最佳答案

如您所指出的,Create通过发出INSERT来创建新行。
NewRecord完全不影响数据库,如果当前值的主键未设置,它只是返回true,这意味着它是一条新记录。这意味着像您所做的那样,在无效上下文中调用NewRecord是没有意义的,因为您忽略了返回值。

关于go - Create和NewRecord有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48787668/

10-09 17:09