[9.x] Set relation parent key when using forceCreate
on HasOne
and HasMany
relations
#42280
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.
Closes #42273
As explained in issue #42273 when calling several methods that either create or instantiate a related instance from a relation method, the relation parent's key is automatically filled, but not when calling
forceCreate
.Take this model as an example:
When calling all these following methods the lesson primary key is set as the new question instance foreign key automatically:
This behavior is also present in other methods which use the ones listed above such as
updateOrCreate
,saveMany
, and others.But when calling
->forceCreate(...)
from a relation, the foreign key is not set, which I agree with issue's #42273 OP, that is not the expected behavior.Reason it does not work as the other is due to
forceCreate
not being implemented onHasOneOrMany
, thus it is deferred to the underlyingBuilder
which, of course, would not set any additional attributes.This PR:
forceCreate
method to theHasOneOrMany
relation class, which adds the relation parent key before actually force creating a related instance