GORM的official documentation演示了一种可以测试记录存在的方法,即:
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
// returns true if record hasn’t been saved (primary key `Id` is blank)
db.NewRecord(user) // => true
db.Create(&user)
// will return false after `user` created
db.NewRecord(user) // => false
这可用于间接测试记录创建中的错误,但在发生故障时不报告任何有用信息 .
检查了source code for db.Create之后,似乎有某种堆栈帧检查在继续之前检查错误,这意味着事务错误将无提示失败:
func Create(scope *Scope) {
defer scope.Trace(NowFunc())
if !scope.HasError() {
// actually perform the transaction
}
}
-
这是一个错误,还是我错过了什么?
-
How can/should I be informed of a failed transaction?
-
我在哪里可以获得有用的调试信息?
2 回答
DB.Create()返回一个新的(克隆的)gorm.DB,这是
struct
并且有一个字段Error
:您可以存储返回的
*gorm.DB
值并检查其DB.Error
字段,如下所示:如果您不需要返回
gorm.DB
中的任何其他内容,则可以直接检查其Error
字段:我已经尝试了接受的答案,但它不起作用,
db.Error
总是返回nil
.只是改变一些东西,它的工作原理,希望它有助于某人: