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;