Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

binggle's avatar

php 8.1 enum troubles when to create row.

Php 8.1.0 is being run on my laptop.

I made enum for user status .


namespace App\Enums;

enum UserStatus: string
{
    case ACTIVE ='Active';
    case DELETED ='Deleted';
    
}

and I made command to fill up users table .

$users = [
    [
        'uid'=>'superadmin',
        'status'=> UserStatus::ACTIVE->name,
    ],
    [
        'uid'=>'admin',
        'status'=> UserStatus::ACTIVE->name,
    ],
];

foreach( $users as $item ){
    User::create( $item );
}

But it gives following error.

    ValueError 

    "ACTIVE" is not a valid backing value for enum "App\Enums\UserStatus"

    at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:1109
        1105▕             $this->attributes[$key] = null;
        1106▕         } elseif ($value instanceof $enumClass) {
        1107▕             $this->attributes[$key] = $value->value;
        1108▕         } else {
    ➜ 1109▕             $this->attributes[$key] = $enumClass::from($value)->value;
        1110▕         }
        1111▕     }
        1112▕ 
        1113▕     /**

        +10 vendor frames 
    11  app/Console/Commands/MakeDataCommand.php:78
        Illuminate\Database\Eloquent\Model::__callStatic("create")

        +13 vendor frames 
    25  artisan:37
        Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

If I use following code, it works fine.

    [
        'uid'=>'admin',
        'status'=> UserStatus::ACTIVE->value,
    ],

or in any php file,


use App\Enums\UserStatus;

echo UserStatus::ACTIVE->name; 

It works fine.

I want to use UserStatus::ACTIVE->name for inserting data into table.

How can I use 'name' not 'value' of Enum ?

Is this a limit of Enum of Php 8.1 ?

0 likes
2 replies
binggle's avatar
binggle
OP
Best Answer
Level 3

Don't mind this, guys.

I guess it is a bug of Laravel.

alikaram's avatar

Hi

I think like you

But you can solve this problem using method insert

$users = [
    [
        'uid'=>'superadmin',
        'status'=> 'active',
    ],
    [
        'uid'=>'admin',
        'status'=> 'active',
    ],
];

User::insert($users);

Please or to participate in this conversation.