From bf432a3424cb88dccfb8f3939c292fa9cddeeebe Mon Sep 17 00:00:00 2001 From: NeoIsRecursive Date: Tue, 23 Jun 2026 16:17:12 +0200 Subject: [PATCH 1/2] feat(database): add failing test for getSelectFields --- .../ModelInspector/ModelInspectorTest.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/Integration/Database/ModelInspector/ModelInspectorTest.php b/tests/Integration/Database/ModelInspector/ModelInspectorTest.php index b6c38dd833..0c4bc894f8 100644 --- a/tests/Integration/Database/ModelInspector/ModelInspectorTest.php +++ b/tests/Integration/Database/ModelInspector/ModelInspectorTest.php @@ -4,6 +4,7 @@ use Tempest\Database\Casters\DataTransferObjectCaster; use Tempest\Database\IsDatabaseModel; +use Tempest\Database\PrimaryKey; use Tempest\Database\Serializers\DataTransferObjectSerializer; use Tempest\Database\Virtual; use Tempest\Mapper\CastWith; @@ -33,6 +34,35 @@ public function test_serialized_property_is_never_a_relation(): void { $this->assertFalse(inspect(ModelInspectorTestModelWithSerializedDtoProperty::class)->isRelation('dto')); } + + public function test_select_doesnt_contain_duplicate_fields(): void + { + $model = inspect(HasRelatedModelWithId::class); + + $selectedFields = $model->getSelectFields(); + + $this->assertEqualsCanonicalizing( + expected: ['name', 'relation_id'], + actual: $selectedFields->toArray(), + ); + } +} + +final class RelationWithId +{ + public PrimaryKey $id; + + public string $name; +} + +final class HasRelatedModelWithId +{ + public RelationWithId $relation; + + public function __construct( + public string $name, + public int $relation_id, + ) {} } final class ModelInspectorTestDtoForModelWithVirtual From 8e8fdf084b1678543eb3cacf4d90fbe1cf59bf24 Mon Sep 17 00:00:00 2001 From: NeoIsRecursive Date: Tue, 23 Jun 2026 16:17:35 +0200 Subject: [PATCH 2/2] fix(database): only return unique fields --- packages/database/src/Builder/ModelInspector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/Builder/ModelInspector.php b/packages/database/src/Builder/ModelInspector.php index 89db10c894..3a24a044cd 100644 --- a/packages/database/src/Builder/ModelInspector.php +++ b/packages/database/src/Builder/ModelInspector.php @@ -582,7 +582,7 @@ public function getSelectFields(): ImmutableArray } } - return $selectFields; + return $selectFields->unique(); } public function resolveRelations(string $relationString, string $parent = '', array $visitedPaths = []): array