From 380942bd1ce14ec0a8040530793054d88085b9c2 Mon Sep 17 00:00:00 2001 From: Tofandel Date: Sun, 20 Oct 2024 11:04:17 +0200 Subject: [PATCH] Don't automatically transform relation names --- .../Normalized/NormalizedModel.php | 20 ++++++------------- tests/Fakes/FakeModelData.php | 4 +++- tests/Normalizers/ModelNormalizerTest.php | 11 ++++++---- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/Normalizers/Normalized/NormalizedModel.php b/src/Normalizers/Normalized/NormalizedModel.php index 2443719f6..0d5196f20 100644 --- a/src/Normalizers/Normalized/NormalizedModel.php +++ b/src/Normalizers/Normalized/NormalizedModel.php @@ -24,11 +24,9 @@ public function __construct( public function getProperty(string $name, DataProperty $dataProperty): mixed { - $propertyName = $this->model::$snakeAttributes ? Str::snake($name) : $name; - - $value = array_key_exists($propertyName, $this->properties) - ? $this->properties[$propertyName] - : $this->fetchNewProperty($propertyName, $dataProperty); + $value = array_key_exists($name, $this->properties) + ? $this->properties[$name] + : $this->fetchNewProperty($name, $dataProperty); if ($value === null && ! $dataProperty->type->isNullable) { return UnknownProperty::create(); @@ -39,26 +37,20 @@ public function getProperty(string $name, DataProperty $dataProperty): mixed protected function fetchNewProperty(string $name, DataProperty $dataProperty): mixed { - $camelName = Str::camel($name); - if ($dataProperty->attributes->contains(fn (object $attribute) => $attribute::class === LoadRelation::class)) { if (method_exists($this->model, $name)) { $this->model->loadMissing($name); - } elseif (method_exists($this->model, $camelName)) { - $this->model->loadMissing($camelName); } } if ($this->model->relationLoaded($name)) { return $this->properties[$name] = $this->model->getRelation($name); } - if ($this->model->relationLoaded($camelName)) { - return $this->properties[$name] = $this->model->getRelation($camelName); - } - if (!$this->model->isRelation($name) && !$this->model->isRelation($camelName)) { + if (!$this->model->isRelation($name)) { try { - return $this->properties[$name] = $this->model->getAttribute($name); + $propertyName = $this->model::$snakeAttributes ? Str::snake($name) : $name; + return $this->properties[$name] = $this->model->getAttribute($propertyName); } catch (MissingAttributeException) { // Fallback if missing Attribute } diff --git a/tests/Fakes/FakeModelData.php b/tests/Fakes/FakeModelData.php index f97ca1f98..6bc5239b7 100644 --- a/tests/Fakes/FakeModelData.php +++ b/tests/Fakes/FakeModelData.php @@ -4,8 +4,10 @@ use Carbon\CarbonImmutable; use Spatie\LaravelData\Attributes\DataCollectionOf; +use Spatie\LaravelData\Attributes\MapInputName; use Spatie\LaravelData\Data; use Spatie\LaravelData\DataCollection; +use Spatie\LaravelData\Mappers\CamelCaseMapper; use Spatie\LaravelData\Optional; class FakeModelData extends Data @@ -14,7 +16,7 @@ public function __construct( public string $string, public ?string $nullable, public CarbonImmutable $date, - #[DataCollectionOf(FakeNestedModelData::class)] + #[DataCollectionOf(FakeNestedModelData::class), MapInputName(CamelCaseMapper::class)] public Optional|null|DataCollection $fake_nested_models, public string $accessor, public string $old_accessor, diff --git a/tests/Normalizers/ModelNormalizerTest.php b/tests/Normalizers/ModelNormalizerTest.php index 04bc3601f..747e74340 100644 --- a/tests/Normalizers/ModelNormalizerTest.php +++ b/tests/Normalizers/ModelNormalizerTest.php @@ -118,7 +118,7 @@ $dataClass = new class () extends Data { #[LoadRelation, DataCollectionOf(FakeNestedModelData::class)] - public array $fake_nested_models; + public array $fakeNestedModels; #[LoadRelation, DataCollectionOf(FakeNestedModelData::class)] public array $fake_nested_models_snake_cased; @@ -131,7 +131,7 @@ $queryLog = DB::getQueryLog(); - expect($data->fake_nested_models) + expect($data->fakeNestedModels) ->toHaveCount(2) ->each->toBeInstanceOf(FakeNestedModelData::class); @@ -183,7 +183,9 @@ $dataClass = new class () extends Data { #[DataCollectionOf(FakeNestedModelData::class), MapInputName(SnakeCaseMapper::class)] - public array|Optional $fakeNestedModels; + public array $fakeNestedModels; + #[DataCollectionOf(FakeNestedModelData::class), MapInputName(SnakeCaseMapper::class), LoadRelation] + public array|Optional $fakeNestedModelsSnakeCased; #[MapInputName(SnakeCaseMapper::class)] public string $oldAccessor; @@ -191,7 +193,8 @@ $data = $dataClass::from($model->load('fakeNestedModels')); - expect($data->fakeNestedModels) + expect(isset($data->fakeNestedModels))->toBeFalse(); + expect($data->fakeNestedModelsSnakeCased) ->toHaveCount(2) ->each() ->toBeInstanceOf(FakeNestedModelData::class);