From d80fc1408d8cdae2e8551009dc27da7d65a81590 Mon Sep 17 00:00:00 2001 From: Bentley O'Kane-Chase Date: Tue, 24 Dec 2024 16:21:26 +1000 Subject: [PATCH 1/2] Use isAbstractClassCast in DataCollectionEloquentCast for easy override --- .../DataCollectionEloquentCast.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Support/EloquentCasts/DataCollectionEloquentCast.php b/src/Support/EloquentCasts/DataCollectionEloquentCast.php index e323aaa64..3a1e4c634 100644 --- a/src/Support/EloquentCasts/DataCollectionEloquentCast.php +++ b/src/Support/EloquentCasts/DataCollectionEloquentCast.php @@ -40,10 +40,10 @@ public function get($model, string $key, $value, array $attributes): ?DataCollec $data = json_decode($value, true, flags: JSON_THROW_ON_ERROR); - $dataClass = $this->dataConfig->getDataClass($this->dataClass); + $isAbstractClassCast = $this->isAbstractClassCast(); - $data = array_map(function (array $item) use ($dataClass) { - if ($dataClass->isAbstract && $dataClass->transformable) { + $data = array_map(function (array $item) use ($isAbstractClassCast) { + if ($isAbstractClassCast) { $morphedClass = $this->dataConfig->morphMap->getMorphedDataClass($item['type']) ?? $item['type']; return $morphedClass::from($item['data']); @@ -73,10 +73,10 @@ public function set($model, string $key, $value, array $attributes): ?string throw CannotCastData::shouldBeArray($model::class, $key); } - $dataClass = $this->dataConfig->getDataClass($this->dataClass); + $isAbstractClassCast = $this->isAbstractClassCast(); - $data = array_map(function (array|BaseData $item) use ($dataClass) { - if ($dataClass->isAbstract && $item instanceof TransformableData) { + $data = array_map(function (array|BaseData $item) use ($isAbstractClassCast) { + if ($isAbstractClassCast && $item instanceof TransformableData) { $class = get_class($item); return [ @@ -90,7 +90,7 @@ public function set($model, string $key, $value, array $attributes): ?string : $item; }, $value); - if ($dataClass->isAbstract) { + if ($isAbstractClassCast) { return json_encode($data); } @@ -107,6 +107,7 @@ public function set($model, string $key, $value, array $attributes): ?string protected function isAbstractClassCast(): bool { - return $this->dataConfig->getDataClass($this->dataClass)->isAbstract; + $dataClass = $this->dataConfig->getDataClass($this->dataClass); + return $dataClass->isAbstract && $dataClass->transformable; } } From 60c5667b96ad0c9461c690a19b3dd3c49540aab1 Mon Sep 17 00:00:00 2001 From: bentleyo Date: Tue, 24 Dec 2024 06:24:45 +0000 Subject: [PATCH 2/2] Fix styling --- src/Support/EloquentCasts/DataCollectionEloquentCast.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Support/EloquentCasts/DataCollectionEloquentCast.php b/src/Support/EloquentCasts/DataCollectionEloquentCast.php index 3a1e4c634..4fdec1188 100644 --- a/src/Support/EloquentCasts/DataCollectionEloquentCast.php +++ b/src/Support/EloquentCasts/DataCollectionEloquentCast.php @@ -108,6 +108,7 @@ public function set($model, string $key, $value, array $attributes): ?string protected function isAbstractClassCast(): bool { $dataClass = $this->dataConfig->getDataClass($this->dataClass); + return $dataClass->isAbstract && $dataClass->transformable; } }