Current Result I get:

Migration:

Component:
use App\Models\User;
use App\Enums\UserStatus;
...
Select::make('status')
->label(__('Status'))
->placeholder(__('Select Status'))
->multiple()
->options(UserStatus::class)
->searchable()
->preload()
->native(false)
->required()
->validationAttribute(__('status'))
->live()
->afterStateUpdated(fn (Livewire $livewire, Select $component) => $livewire->validateOnly($component->getStatePath())),
Model:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\AsEnumCollection;
use App\Enums\UserStatus;
class User extends Model
{
protected $casts = [
'status' => AsEnumCollection::class . ':' . UserStatus::class,
];
protected function status(): Attribute
{
return Attribute::make(
get: function (string $value) {
return Arr::accessible($value) || (Str::startsWith($value, '[') && Str::endsWith($value, ']'))
? collect(json_decode($value, true))->map(function ($val) {
return UserStatus::tryFrom($val);
})->all()
: UserStatus::tryFrom($value);
}
);
}
}
Enum:
<?php
namespace App\Enums;
use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;
enum UserStatus: string implements HasColor, HasIcon, HasLabel
{
case Open = 'open';
case Active = 'active';
case Inactive = 'inactive';
case Restricted = 'restricted';
case Closed = 'closed';
public const Default = self::Open->value;
public function getColor(): string | array | null
{
return match ($this) {
self::Open => 'primary',
self::Active => 'success',
self::Inactive => 'info',
self::Restricted => 'warning',
self::Closed => 'danger',
};
}
public function getIcon(): ?string
{
return match ($this) {
self::Open => 'bi-door-open',
self::Active => 'bi-toggle-on',
self::Inactive => 'bi-toggle-off',
self::Restricted => 'bi-patch-exclamation',
self::Closed => 'bi-door-closed',
};
}
public function getLabel(): ?string
{
return match ($this) {
self::Open => __('Open'),
self::Active => __('Active'),
self::Inactive => __('Inactive'),
self::Restricted => __('Restricted'),
self::Closed => __('Closed'),
};
}
}