From cc669edbc350a4eb51aff005966233ee69b3bdab Mon Sep 17 00:00:00 2001 From: Sami Mazouz Date: Sat, 10 Feb 2024 14:15:46 +0100 Subject: [PATCH 1/4] feat: `MorphTo` serialization --- src/Laravel/EloquentResource.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Laravel/EloquentResource.php b/src/Laravel/EloquentResource.php index 0695409..8318d70 100644 --- a/src/Laravel/EloquentResource.php +++ b/src/Laravel/EloquentResource.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Support\Str; use Tobyz\JsonApiServer\Context; use Tobyz\JsonApiServer\Pagination\OffsetPagination; @@ -76,7 +77,19 @@ protected function getRelationshipValue(Model $model, Relationship $field, Conte // related model with the value of the ID filled. if ($relation instanceof BelongsTo && $context->include === null) { if ($key = $model->getAttribute($relation->getForeignKeyName())) { - $related = $relation->getRelated(); + $related = null; + + if ($relation instanceof MorphTo) { + $morphType = $model->{$relation->getMorphType()}; + $morphType = MorphTo::getMorphedModel($morphType) ?? $morphType; + + if (class_exists($morphType)) { + $related = new $morphType; + } + } + + $related ??= $relation->getRelated(); + return $related->newInstance()->forceFill([$related->getKeyName() => $key]); } From bf397a93d48915a14ffa34938c68d4f0649c2f42 Mon Sep 17 00:00:00 2001 From: SychO9 Date: Sat, 10 Feb 2024 13:16:45 +0000 Subject: [PATCH 2/4] Run Prettier --- src/Laravel/EloquentResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Laravel/EloquentResource.php b/src/Laravel/EloquentResource.php index 8318d70..1ec6f04 100644 --- a/src/Laravel/EloquentResource.php +++ b/src/Laravel/EloquentResource.php @@ -84,7 +84,7 @@ protected function getRelationshipValue(Model $model, Relationship $field, Conte $morphType = MorphTo::getMorphedModel($morphType) ?? $morphType; if (class_exists($morphType)) { - $related = new $morphType; + $related = new $morphType(); } } From 555c9bb92f7ed2a2e30413c6d3c1ebb6a7054766 Mon Sep 17 00:00:00 2001 From: Sami Mazouz Date: Sat, 30 Mar 2024 12:47:12 +0100 Subject: [PATCH 3/4] chore: use `createModelByType` --- src/Laravel/EloquentResource.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Laravel/EloquentResource.php b/src/Laravel/EloquentResource.php index 1ec6f04..41221d9 100644 --- a/src/Laravel/EloquentResource.php +++ b/src/Laravel/EloquentResource.php @@ -77,19 +77,14 @@ protected function getRelationshipValue(Model $model, Relationship $field, Conte // related model with the value of the ID filled. if ($relation instanceof BelongsTo && $context->include === null) { if ($key = $model->getAttribute($relation->getForeignKeyName())) { - $related = null; - if ($relation instanceof MorphTo) { $morphType = $model->{$relation->getMorphType()}; $morphType = MorphTo::getMorphedModel($morphType) ?? $morphType; - - if (class_exists($morphType)) { - $related = new $morphType(); - } + $related = $relation->createModelByType($morphType); + } else { + $related = $relation->getRelated(); } - $related ??= $relation->getRelated(); - return $related->newInstance()->forceFill([$related->getKeyName() => $key]); } From 931b0456b48b6bed8696ace8c18b0a4058a9a4c8 Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Sun, 31 Mar 2024 10:59:56 +1030 Subject: [PATCH 4/4] Remove unnecessary line --- src/Laravel/EloquentResource.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Laravel/EloquentResource.php b/src/Laravel/EloquentResource.php index 41221d9..f400cc1 100644 --- a/src/Laravel/EloquentResource.php +++ b/src/Laravel/EloquentResource.php @@ -79,7 +79,6 @@ protected function getRelationshipValue(Model $model, Relationship $field, Conte if ($key = $model->getAttribute($relation->getForeignKeyName())) { if ($relation instanceof MorphTo) { $morphType = $model->{$relation->getMorphType()}; - $morphType = MorphTo::getMorphedModel($morphType) ?? $morphType; $related = $relation->createModelByType($morphType); } else { $related = $relation->getRelated();