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.
Problem
We have one-to-many relations, e.g. Message has few Photos. For both one-to-one and one-to-many relations, the syntax is the same:
the code to return value of both types of relation is here:
Where:
$relations[$property]
-- FQCN of the BaseObject child that extends Collection$value
-- relation's raw data (json parsed into associative array)It works perfectly in case of one-to-one (e.g. Message may have only a single Document, so it will call
Document::make($value)
that will returnDocument
instance).In case of one-to-many relation type, it will call PhotoSize::make($value), but that $value - is data for ARRAY of PhotoSize objects. As the result, $message->photo will return PhotoSize instance instead of a list of PhotoSize instances.
Solution
Use array syntax to specify one-to-many relation:
Plus update a method to initiate relation from raw data (see a new
getRelationValue
method).Notes
IMO this is not a breaking compatibility change, but changes big enough for a new minor version.