バーテンダーエンジニア

元フレアバーテンダーからエンジニアに転職。未経験からのエンジニア転職経験談・実務で感じたこと・個人開発で学んだ内容・日常話などマイペースに発信していきます。仕事ではphp、Laravel、Vue.js、Angular辺りを触ってます。趣味は筋トレ!!ソムリエの資格も持ってます^^

laravel-enumを利用してみた

はじめに

こんにちは。関西でWebエンジニアをしているYKIです。
今回、laravelのマイグレーションenumを利用したい場面があり、少々調べたので自身の備忘録としてまとめて置きたいと思います。

enum型とは...

enum型は列挙型とも呼ばれ、複数の定数を一つの型で統一して管理できるものです。今回はenumをLaravelで利用していきます。

導入

Laravel本体ではサポートされていないようなのでComposer経由でパッケージを入れていきます。
今回は、"laravel-emun" を利用します。
では早速、下記コマンドでインストールを行います。

$ composer require bensampo/laravel-enum


実装

enumクラスを作成していきます。今回は性別のデータを例にします。

$ php artisan make:enum SexType
→ Enum created successfully.

デフォルトでは、App\Enums ディレクトリの下にphpファイルが作成されるのでこちらを編集していきます。

<?php

namespace App\Enums;
 
use BenSampo\Enum\Contracts\LocalizedEnum;
use BenSampo\Enum\Enum;
 
final class SexType extends Enum implements LocalizedEnum
{
    const OTHER = 0;
    const MALE = 1;
    const FEMALE = 2;
}

resources/lang/ja/enum.phpファイルを用意し、Enumの値の説明を日本語化します。

<?php

return [
        SexType::class => [
            SexType::OTHER => '未設定',
            SexType::MALE => '男性',
            SexType::FEMALE => '女性',
    ],
];


今回はマイグレーションで利用していきます。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use App\Enums\SexType;
 
class AddColumnPaymentType extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->enum('sex_type', SexType::getValues()) ←こちらで利用
                ->default(PaymentType::OTHER); ←デフォルト値をOTHERに設定
        });
    }
}

まとめ

ベタ書きするよりもすっきりと記述する事ができました。
今回初めての利用になりますので、補足等あればコメントいただけると幸いです。

参考リンク

公式はこちら github.com