[12.x] Add pendingAttributes method to Eloquent relationships
#55178
+734
−0
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
The
withAttributesmethod (documented here) is very helpful for adding attributes to both thewhereclauses as well as the attributes when a model is made from the relationship.However, I ran into a situation where I needed to set an attribute when the relationship is created, but not constrain the relationship to only rows where the attribute is set to that value.
The
$pendingAttributesproperty already exists on the Eloquent builder and all the logic to add the pending attributes to the new models also exist.What
This led to me creating the
pendingAttributesmethod to do the same thing aswithAttributesbut not touch thewhereclauses.Implementation:
Tests:
tests/Database/DatabaseEloquentBelongsToManyPendingAttributesTest.phpCopied from
DatabaseEloquentBelongsToManyWithAttributesTest.phpand made sure only the relationalwhereclauses existtests/Database/DatabaseEloquentHasOneOrManyPendingAttributesTest.phpCopied from
DatabaseEloquentHasOneOrManyWithAttributesTest.phpand made sure only the relationalwhereclauses existtests/Database/DatabaseEloquentPendingAttributesTest.phpCopied from
DatabaseEloquentWithAttributesTest.phpand made sure nowhereclauses