0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Enum】LaravelでのEnumの使い方

Last updated at Posted at 2025-07-04

列挙型(Enum)とは

列挙型(Enumerations)または Enum を使うと、 開発者は取りうる値を限定した独自の型を定義できます。 これによって、"不正な状態を表現できなくなる" ので、 ドメインモデルを定義する時に特に役立ちます。

ざっくりいうと、「決まった値だけを許したい」時に使うのが列挙型(Enum)になります。

参考ページ

公式リファレンス

前提条件

  • PHP 8.4.8
  • Laravel 12.19.3

Enumファイルの作り方

Enumファイルを作るコマンド
php artisan make:enum SampleEnum

実際のコード

動作検証の為、コントローラーから呼び出しています。

Enumから値を呼び出す方法
<?php

namespace App\Http\Controllers;

use App\Enums\SampleEnum;
use Illuminate\Http\Request;

class EnumTestController extends Controller
{
    /**
     * Handle the incoming request.
     */
    public function __invoke(Request $request)
    {
        // Enumの値を取得
        var_dump(SampleEnum::Pending->value);
        // string(7) "pending"

        // Enumの名前を取得
        var_dump(SampleEnum::Pending->name);
        // string(7) "Pending"

        // Enumの値を配列で取得(cases()との違いは、valuesは自分で定義する必要がある)
        var_dump(SampleEnum::values());
        // array(3) { [0]=> string(7) "pending" [1]=> string(10) "processing" [2]=> string(9) "completed" }

        // Enumの値を配列で取得(定義されている全てのcaseを宣言された順に含めた配列)
        var_dump(SampleEnum::cases());
        // array(3) { [0]=> enum(App\Enums\SampleEnum::Pending) [1]=> enum(App\Enums\SampleEnum::Processing) [2]=> enum(App\Enums\SampleEnum::Completed) }

        // Enumをキーと値のペアで取得
        var_dump(SampleEnum::forSelect());
        // array(3) { ["pending"]=> string(7) "Pending" ["processing"]=> string(10) "Processing" ["completed"]=> string(9) "Completed" }

        // Enumの値を取得(対応するcaseがない場合はエラー)
        var_dump(SampleEnum::from('pending')->value);
        // string(7) "pending"

        // Enumの値を取得(対応するcaseがない場合はnullを返す)
        var_dump(SampleEnum::tryFrom('pending')->value);
        // string(7) "pending"

        var_dump(SampleEnum::tryFrom('Invalid') ?? 'Invalid value');
        // string(13) "Invalid value"

        // Enumのlabelを取得(自作でgetLabelメソッドを使って取得)
        var_dump(SampleEnum::getLabel('pending') ?? null);
        // string(12) "処理待ち"
    }
}

Enumファイルの中身
<?php

namespace App\Enums;

use App\Enums\EnumTrait;

enum SampleEnum: string
{
    use EnumTrait;

    case Pending    = 'pending';
    case Processing = 'processing';
    case Completed  = 'completed';

    /**
     * label
     *
     * @return string
     */
    public function label(): string
    {
        return match($this) {
            self::Pending    => '処理待ち',
            self::Processing => '処理中',
            self::Completed  => '完了',
        };
    }
}

Enumファイルは複数存在すると思うので、Traitファイルを作って、それぞれのEnumファイルに組み込む為に作成しています。
公式リファレンス

Traitファイル
<?php

namespace App\Enums;

trait EnumTrait
{
    /**
     * 値を配列で取得
     *
     * @return array
     */
    public static function values(): array
    {
        return array_column(self::cases(), 'value');
    }

    /**
     * 全てのcaseを宣言された順に含めた配列を取得
     *
     * @return array
     */
    public static function forSelect(): array
    {
        return array_column(self::cases(), 'name', 'value');
    }

    /**
     * Enumの値を取得
     *
     * @param  mixed $value
     * @return string
     */
    public static function getLabel(string $value): string
    {
        return self::tryFrom($value)->label() ?? '';
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?