[8.x] Fixed SoftDeletes force deletion sets "exists" property to false only when deletion succeeded #39987
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi everybody ✋
This PR fixes the behavior of
SoftDeletes::performDeleteOnModel()
method in case of forceDeleting.The Current Issue
Currently, when a model with the
SoftDeletes
trait is force deleted, the model property$model->exists
is set tofalse
before the database is called for deletion.This behavior is particularly annoying if an error occurs during the deletion (e.g: foreign key constraint), if we catch the Exception, the
$model->exists
property will be equal tofalse
whereas the model has not been deleted.The Fix
With this fix, the database deletion call is made before the property setting. This ensure that
$model->exists
property is set to false only when the deletion succeeded