Added support of JsonSerializable interface to ArrayableTrait (#17888)

This commit is contained in:
Ivan Hermanov
2020-02-22 11:34:27 +02:00
committed by GitHub
parent c41b428088
commit 6e9764b467
2 changed files with 55 additions and 2 deletions

View File

@ -128,12 +128,16 @@ trait ArrayableTrait
if ($recursive) {
$nestedFields = $this->extractFieldsFor($fields, $field);
$nestedExpand = $this->extractFieldsFor($expand, $field);
if ($attribute instanceof Arrayable) {
if ($attribute instanceof \JsonSerializable) {
$attribute = $attribute->jsonSerialize();
} elseif ($attribute instanceof Arrayable) {
$attribute = $attribute->toArray($nestedFields, $nestedExpand);
} elseif (is_array($attribute)) {
$attribute = array_map(
function ($item) use ($nestedFields, $nestedExpand) {
if ($item instanceof Arrayable) {
if ($item instanceof \JsonSerializable) {
return $item->jsonSerialize();
} elseif ($item instanceof Arrayable) {
return $item->toArray($nestedFields, $nestedExpand);
}
return $item;