diff --git a/callback_delete.go b/callback_delete.go index 73d90880..1ec6578e 100644 --- a/callback_delete.go +++ b/callback_delete.go @@ -27,6 +27,10 @@ func beforeDeleteCallback(scope *Scope) { // deleteCallback used to delete data from database or set deleted_at to current time (when using with soft delete) func deleteCallback(scope *Scope) { + if scope.PrimaryKeyZero() { + scope.db.AddError(ErrNonSpecificDelete) + } + if !scope.HasError() { var extraOption string if str, ok := scope.Get("gorm:delete_option"); ok { diff --git a/errors.go b/errors.go index 832fa9b0..72eeb7df 100644 --- a/errors.go +++ b/errors.go @@ -6,6 +6,8 @@ import ( ) var ( + // ErrNonSpecificDelete no primary key specified for delete, happens when you try to `Delete` a record without a primary key set + ErrNonSpecificDelete = errors.New("no primary key specified for delete") // ErrRecordNotFound record not found error, happens when haven't find any matched data when looking up with a struct ErrRecordNotFound = errors.New("record not found") // ErrInvalidSQL invalid SQL error, happens when you passed invalid SQL