From 68fddafbf9b5a8ddff54d911a39d854faf3dc61d Mon Sep 17 00:00:00 2001 From: leiyuqing Date: Sun, 27 Mar 2022 08:37:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20BeforeCreate,=20db.Statement.ReflectValu?= =?UTF-8?q?e=E4=B8=8D=E6=98=AF=E6=8C=87=E9=92=88=E5=9E=8B=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99AfterCreate,=20BeforeUpdate,=20AfterUpdate?= =?UTF-8?q?=E4=BC=9Apanic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- callbacks/callbacks.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/callbacks/callbacks.go b/callbacks/callbacks.go index d681aef3..e72f561e 100644 --- a/callbacks/callbacks.go +++ b/callbacks/callbacks.go @@ -24,6 +24,10 @@ func RegisterDefaultCallbacks(db *gorm.DB, config *Config) { return !db.SkipDefaultTransaction } + canAddr := func(db *gorm.DB) bool { + return db.Statement.ReflectValue.CanAddr() + } + if len(config.CreateClauses) == 0 { config.CreateClauses = createClauses } @@ -39,11 +43,11 @@ func RegisterDefaultCallbacks(db *gorm.DB, config *Config) { createCallback := db.Callback().Create() createCallback.Match(enableTransaction).Register("gorm:begin_transaction", BeginTransaction) - createCallback.Register("gorm:before_create", BeforeCreate) + createCallback.Match(canAddr).Register("gorm:before_create", BeforeCreate) createCallback.Register("gorm:save_before_associations", SaveBeforeAssociations(true)) createCallback.Register("gorm:create", Create(config)) createCallback.Register("gorm:save_after_associations", SaveAfterAssociations(true)) - createCallback.Register("gorm:after_create", AfterCreate) + createCallback.Match(canAddr).Register("gorm:after_create", AfterCreate) createCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction) createCallback.Clauses = config.CreateClauses @@ -65,11 +69,11 @@ func RegisterDefaultCallbacks(db *gorm.DB, config *Config) { updateCallback := db.Callback().Update() updateCallback.Match(enableTransaction).Register("gorm:begin_transaction", BeginTransaction) updateCallback.Register("gorm:setup_reflect_value", SetupUpdateReflectValue) - updateCallback.Register("gorm:before_update", BeforeUpdate) + updateCallback.Match(canAddr).Register("gorm:before_update", BeforeUpdate) updateCallback.Register("gorm:save_before_associations", SaveBeforeAssociations(false)) updateCallback.Register("gorm:update", Update(config)) updateCallback.Register("gorm:save_after_associations", SaveAfterAssociations(false)) - updateCallback.Register("gorm:after_update", AfterUpdate) + updateCallback.Match(canAddr).Register("gorm:after_update", AfterUpdate) updateCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction) updateCallback.Clauses = config.UpdateClauses