Create 和 NewRecord 有什么区别?

What is different between Create and NewRecord?

根据文档和 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 根本不影响数据库,它只是 returns true 如果当前值的主键未设置,这意味着它是一条新记录。这意味着像您所做的那样在 void 上下文中调用 NewRecord 是没有意义的,因为您忽略了 return 值。