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