Laravel 9 php 8.1 enum not saving

Viewed 31

Thanks everyone for your help. I cannot save the my enum. I've looked through documentation and searched but I can't seem to find a solution.

I need the create function to save the correct enum value for the user's role. I've tried a few formats but they all fail.

How should I format the enum to save the correct value during the 'create' function?

The Enum

<?php
namespace App\Enums;

enum RoleEnum: string
{
    case employee  = 'employee';
    case manager   = 'manager';
    case admin     = 'admin';
}

The model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Boss;
use App\Enums\RoleEnum;

class Employee extends Model
{
    use HasFactory;
    protected $fillable = [ 'id', 'name', 'boss_id','title' ];
    protected $casts = [ 'role' => RoleEnum::class];
    
    public function employees()
    {
        return $this->belongsTo('\App\Models\Boss');
    }
}

The Controller

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Validation\Rules\Enum;
use App\Models\Boss;
use App\Models\Employee;
use App\Enums\RoleEnum;

class EmployeeController extends Controller
{
public function store(Request $request)
    {
         $request->validate([
            'name'       =>'required|string|max:255',
            'boss_id'    =>'required|exists:bosses,id',
            'title'      =>'string|max:255',
            'role'       =>[ 'required', new Enum(RoleEnum::class) ],
        ]); 
        $employee = Employee::create([
            'name'       => $request->name,
            'boss_id'    => $request->boss_id,
            'title'      => $request->title,
            'role'       => $request->role, // this is what's failing ***************
        ]);
        $bosses = Boss::get();
        return redirect('/details')->with([
            'employee' => $employee,
            'bosses'   => $bosses,
            'success','User Created!',
        ]);
    }
}

The Create blade input (I only included the code in question)

   <div class="form-group">
      <label for="role">Role</label>
         <select 
            class="form-control" 
            id="role"
            v-model="game.role"
            required
      >
       <option class="form-check-input" type="radio" value='employee'>Employee</option>
       <option class="form-check-input" type="radio" value='manager'>Manager</option>
       <option class="form-check-input" type="radio" value='admin'>Admin</option>
      </select>
  </div>

Consol.log(employee)

name: "John Martin"
boss_id: "5"
title: "Trainer"
role: "employee"

This is all new territory for me so any help is greatly appreciated.

1 Answers

you can access like this in laravel.

RoleEnum::manager 

you can also use with core PHP like this

enum RoleEnum: string
{
    case employee  = 'employee';
    case manager   = 'manager';
    case admin     = 'admin';
}
<?php
    print RoleEnum::manager->value;
?>
Related