Create 和 NewRecord 有什么区别?
What is different between Create and NewRecord?
根据文档和 gorm repo 的问题,
db.Create
是插入记录。
db.NewRecord
只检查当前值是否有主键。所以不要插入记录。
我在下面写了这段代码。
但是我可以用 db.Create
和 db.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 值。
根据文档和 gorm repo 的问题,
db.Create
是插入记录。
db.NewRecord
只检查当前值是否有主键。所以不要插入记录。
我在下面写了这段代码。
但是我可以用 db.Create
和 db.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 值。