make:enum — Enumクラスを作成するコマンド

artisan

php artisan make:enum コマンドは、Laravel内でEnumクラスを作成するコマンドです。

アイテム理由
PHP 8.1+PHP 8.1で導入されたネイティブ enum サポート
Laravel 11+php artisan make:enum は Laravel 11 以降に組み込まれたコマンド
ディレクトリ app/Enums生成される enum はこのフォルダに置かれる(無ければ作成)
Eloquent モデルenum 値を保存するテーブルのモデル
データベース列string, int, uuid など、enum のバック値に合わせた型
属性キャスティングモデルで列を enum クラスにキャスト

enum クラスの作成

# プロジェクトルートで実行
php artisan make:enum OrderStatus

プロンプトが表示されます。バック値の型に合わせて選択してください。

Select backing type:
  1) Backed enum (int or string)
  2) Pure enum (no backing value)
  3) Flags enum

例: status カラムが文字列なら 1) Backed enum を選び、次に string と入力。

生成されたファイルは以下のようになります。

// app/Enums/OrderStatus.php

namespace App\Enums;

enum OrderStatus: string
{
    case Pending  = 'pending';
    case Completed = 'completed';
    case Cancelled = 'cancelled';
}

モデルへの追加

Order モデルが status カラムを持つ例です。

// app/Models/Order.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Enums\OrderStatus;

class Order extends Model
{
    protected array $casts = [
        'status' => OrderStatus::class,
    ];
}

コードでの利用例

操作コード例
現在のステータスを取得$order->statusOrderStatus インスタンス
ステータスの比較if ($order->status === OrderStatus::Completed) { … }
ステータスを設定$order->status = OrderStatus::Pending; $order->save();
バック値を取得$order->status->value'pending'
名前を取得$order->status->name'Pending'
全ケースを列挙foreach (OrderStatus::cases() as $status) { … }

マイグレーション例

Schema::create('orders', function (Blueprint $table) {
    $table->id();
    $table->string('status', 20); // string-backed enum
    $table->timestamps();
});

データベースレベルで enum 値を制限したい場合(MySQL 8.0+ / PostgreSQL):

$table->string('status', 20)
      ->checkIn(['pending', 'completed', 'cancelled']);

よくある落とし穴と対策

問題対策
enum が保存されない列の型(string, int, uuid)が enum のバック値と一致しているか確認
マイグレーションと enum が同期していないenum を変更したら列を手動で修正または新しいマイグレーションを作成
オートロードが効かないenum ファイルを手動で追加したら composer dump-autoload を実行
Laravel 11 未満で make:enum を使えない旧バージョンなら spatie/laravel-enum などのパッケージを検討

フルワークフロー例

# 1. enum 作成
php artisan make:enum OrderStatus
// app/Models/Order.php
class Order extends Model
{
    protected array $casts = [
        'status' => OrderStatus::class,
    ];
}
// 2. オーダー作成
$order = Order::create([
    'status' => OrderStatus::Pending,
]);

// 3. ステータス更新
$order->status = OrderStatus::Completed;
$order->save();

// 4. ステータスで検索
$completed = Order::where('status', OrderStatus::Completed)->get();

これで、Laravel 11+ の make:enum を使い、型安全かつ直感的に enum を扱えるようになります。

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする