From 037a258a4ac6d6d348492d76edfd939332d547ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gamez?= Date: Tue, 14 Mar 2023 01:17:07 +0100 Subject: [PATCH] Fix Enums not being cast when calling `Model::toArray()` --- src/Eloquent/Model.php | 2 +- tests/ModelTest.php | 15 +++++++++++++++ tests/models/MemberStatus.php | 6 ++++++ tests/models/User.php | 2 ++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/models/MemberStatus.php diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index faab9a980..2d938b745 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -556,7 +556,7 @@ protected function addCastAttributesToArray(array $attributes, array $mutatedAtt } if ($this->isEnumCastable($key) && (! $castValue instanceof Arrayable)) { - $castValue = $castValue !== null ? $this->getStorableEnumValue($attributes[$key]) : null; + $castValue = $castValue !== null ? $this->getStorableEnumValue($castValue) : null; } if ($castValue instanceof Arrayable) { diff --git a/tests/ModelTest.php b/tests/ModelTest.php index 5d94920b9..e4eeefbb4 100644 --- a/tests/ModelTest.php +++ b/tests/ModelTest.php @@ -786,4 +786,19 @@ public function testFirstOrCreate(): void $check = User::where('name', $name)->first(); $this->assertEquals($user->_id, $check->_id); } + + public function testEnumCast(): void + { + $name = 'John Member'; + + $user = new User(); + $user->name = $name; + $user->member_status = MemberStatus::Member; + $user->save(); + + /** @var User $check */ + $check = User::where('name', $name)->first(); + $this->assertSame(MemberStatus::Member->value, $check->getRawOriginal('member_status')); + $this->assertSame(MemberStatus::Member, $check->member_status); + } } diff --git a/tests/models/MemberStatus.php b/tests/models/MemberStatus.php new file mode 100644 index 000000000..0c702218e --- /dev/null +++ b/tests/models/MemberStatus.php @@ -0,0 +1,6 @@ + 'datetime', 'entry.date' => 'datetime', + 'member_status' => MemberStatus::class, ]; protected static $unguarded = true;