[5.6] Allow eager-loading mixed relationships of polymorphic collection #23626
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've had this macro kicking around for awhile since the framework doesn't offer a way to avoid N+1 queries from
morphTo()
nested relationships. This addsIlluminate\Database\Eloquent\Collection@loadMorph()
to allow nested eager loading by naming the unique relationship(s) for each class name.Issue reported:
External Laravel community:
Example Use Case
In an ideal world...
...this would be supported:
I really wanted to work this into the existing eager-load infrastructure:
Illuminate\Database\Eloquent\Builder@with()
Illuminate\Database\Eloquent\Collection@load()
Illuminate\Database\Eloquent\Model@with
(array object property)However this is going to require a significant rewrite of the Eloquent internals that store an associative array of query constraint
Closure
s.Pagination
For better developer experience in controllers, an explicit
AbstractPaginator@loadMorph()
proxy is added to return the paginator. This allows it to be passed into the view or returned by an API response.Then controllers don't have to awkwardly do:
but: