[8.x] Add Eloquent builder whereMorphedTo
method to streamline finding models morphed to another model
#38668
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.
This PR adds
whereMorphedTo
andorWhereMorphedTo
methods to the Eloquent Builder.These methods are a shortcut for adding a where condition looking for models that are morphed to a specific related model, without the overhead of a
whereHas
subquery.As an example, consider the following model:
Say we want to find feedback which is about a specific
$model
. One way to do this is to usewhereHas
:However, this is verbose and adds an unnecessary subquery. The information we want to constrain against is already in the feedback table. So, a more performant way would be to do this:
This is better, but it's still rather verbose. Also, the
subject_type
andsubject_id
columns are hard-coded – it would be better if we didn't have to worry about them and could automatically use the column names defined on theMorphTo
relationship itself.With this PR, the above can be replaced by this:
It adds the same where clause, but is much simpler to read/write, and uses the column names defined on the
MorphTo
relationship.