php 🚀
note2self 🚀
laravel 🚀
Enums, Casting and Models

Note to self on this one.

When I want to enforce a model field I can easily use the Enum class type.

In the model class I can cast the field to the enum.

    protected $casts = [
        'type' => PaymentEnum::class,
    ];

And the Enum looks like

<?php

namespace App\Models\Enums;

enum PaymentEnum: string
{
    case Refund = 'refund';
    case Payment = 'payment';
}

Now I can forse this to be of these types.

    public function test_enum()
    {
        $this->expectException(\ValueError::class);
        $model = Payment::factory()->create(['type' => 'foo']);
    }