[8.x] Avoid no-op database query in Model::destroy() with empty ids #35294
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.
I recently discovered that calling
Model::destroy()
with an empty array produces an unnecessary no-op database query.This happens because the
destroy()
method callsBuilder::whereIn()
, which in turn turn an empty set of ids into the condition0 = 1
:framework/src/Illuminate/Database/Query/Grammars/Grammar.php
Line 271 in 5ba7984
Since I do not know the reasons for adding the
0 = 1
condition, I went for a more cautious and minimal change.Now,
destroy()
checks for an empty input and bails early, saving a database roundtrip for a query that is guaranteed to have no effect.