[12.x] Fix double query in model relation serialization #55547
Merged
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.
Why
When a model has an eager-loaded relation through
$with
, the unserialization process ends up loading the relation twice (first through$with
and then again when loading the relations that were serialized). Issue #55546 highlights what this PR tries to fix.I created a repo that reproduces this error: https://github.com/AndrewMast/laravel-testing/tree/issue-55546 (see diff).
What
The
restoreModel()
method inSerializesAndRestoresModelIdentifiers.php
uses theload
method to fetch all the serialized relations. However, this leads to the double query for relations already loaded (i.e. in$with
). Changingload
toloadMissing
resolves this issue.