[5.6] Ignore non-where bindings in nested where() constraints #24000
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.
Nested
where()
constraints merge all bindings from the given query, even the ones from other query parts.This breaks queries that reference a relationship with
WHERE
bindings (e.g.MorphMany
) in$withCount
and use a nestedwhere()
constraint:The query doesn't work as expected because an extra binding is added:
As a result
'App\ParentModel'
is used for the second placeholder and1
is ignored.This is caused by
Model::newQueryWithoutScopes()
adding$withCount
to every query.So the query received by
Builder::where()
contains the$withCount
bindings.This PR solves the problem by ignoring non-where bindings when the nested query is merged.
Fixes #23957.