[9.x] Refactor for missing attributes #44870
Closed
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.
Model::preventAccessingMissingAttributes()
option #44283 (Opt-in Model::preventAccessingMissingAttributes() option) to a new traitRestrictsAttributes
instead of it being spread out inHasAttributes
andIlluminate\Database\Eloquent\Model
. This increases modularity greatly and allows developers to use these traits themselves.HasAttributes
trait so it has no dependencies on theRestrictsAttributes
trait (that is: functions from this trait have to be checked first usingmethod_exists()
before being called. Not having theRestrictsAttributes
trait thus reverts the behaviour to before PR [9.x] Opt-inModel::preventAccessingMissingAttributes()
option #44283 )a && b && c
) inthrowMissingAttributeExceptionIfApplicable()
so it doesn't break on the calls$this->exists && !$this->wasRecentlyMerged
since these properties are not part of the trait (and therefore may be undefined depending on where you include this trait). Now, theself::preventsAccessingMissingAttributes()
is called first which by default returnsfalse
therefore ending the if-statement. This only increases stability sincea && b && c
can be rearranged in any way, but in this situation there is 1 case that is better being called first.