[8.x] Add Eloquent builder whereMorphedTo method to streamline finding models morphed to another model#38668
Merged
Merged
Conversation
…dels morphed to another model
Member
|
I think it may be useful to be able to pass a string as the model name as well? ->whereMorphedTo('subject', Feedback::class); |
Contributor
Author
|
Done. Not sure why the tests are failing in that particular instance, but it doesn't seem to have to do with the PR. |
victorvilella
pushed a commit
to cdsistemas/framework
that referenced
this pull request
Oct 12, 2021
…ing models morphed to another model (laravel#38668) * Add Eloquent builder `whereMorphedTo` method to streamline finding models morphed to another model * Add ability to pass string as the model name
|
|
||
| return $this->where(function ($query) use ($relation, $model) { | ||
| $query->where($relation->getMorphType(), $model->getMorphClass()) | ||
| ->where($relation->getForeignKeyName(), $model->getKey()); |
Collaborator
There was a problem hiding this comment.
Isn't this wrong if the relation uses something other than the model key as the owner key? $model->getKey() should be $relation->getRelatedKeyFrom($model)?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
whereMorphedToandorWhereMorphedTomethods 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
whereHassubquery.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_typeandsubject_idcolumns 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 theMorphTorelationship 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
MorphTorelationship.