diff --git a/src/Support/EloquentCasts/DataCollectionEloquentCast.php b/src/Support/EloquentCasts/DataCollectionEloquentCast.php index e323aaa64..4fdec1188 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,8 @@ 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; } }