#初めに
LaravelでEnumの使い方をまとめました。
#環境
・PHP 8.0.1
・Laravel 8.40.0
#公式
https://github.com/BenSampo/laravel-enum
#インストール
composer require bensampo/laravel-enum
#ファイルの作成
ファイルの作成をコマンドで実行します。
php artisan make:enum Type
コマンドを実行するとファイルが作成されます。
apps/Enums/Type.php
<?php
namespace App\Enums;
use BenSampo\Enum\Enum;
/**
* @method static static OptionOne()
* @method static static OptionTwo()
* @method static static OptionThree()
*/
final class Type extends Enum
{
const OptionOne = 0;
const OptionTwo = 1;
const OptionThree = 2;
}
#enumを定義
typeを1:食べ物, 2:旅行 3:音楽 4:映画と列挙型で定義します。
また日本語を使用するために「implements LocalizedEnum」を追加する。
<?php
namespace App\Enums;
use BenSampo\Enum\Contracts\LocalizedEnum;
use BenSampo\Enum\Enum;
/**
* @method static static Food()
* @method static static Trip()
* @method static static Music()
* @method static static Movie()
*/
final class Type extends Enum implements LocalizedEnum
{
/** 食べ物 */
const Food = 1;
/** 旅行 */
const Trip = 2;
/** 音楽 */
const Music = 3;
/** 映画 */
const Movie = 4;
}
テーブルのフィールドにenum型で定義する。マイグレーションファイルにenumで定義する。
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('article_types', function (Blueprint $table): void {
$table->id();
$table->foreignId('article_id')->constrained();
$table->enum('type', Type::getValues());
$table->timestamps();
});
}
データベースを確認するとテーブルは以下のようにenum型で定義されます。
mysql> desc article_types;
+------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| article_id | bigint unsigned | NO | MUL | NULL | |
| type | enum('1','2','3','4') | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+-----------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
#日本語表記を使う
表記を日本語にするために以下のように「en」から「ja」変更する。
・config/app.php
'locale' => 'ja',
列挙型の日本語表記を設定するためにファイルを作成し定義する。
・resources/lang/ja/enums.php
<?php
use App\Enums\Type;
return [
Type::class => [
Type::Food => '食べ物',
Type::Trip => '旅行',
Type::Music => '音楽',
Type::Movie => '映画',
],
];
staticのgetDescriptionで値を取得できる。
dd(Type::getDescription(4));
⇨ "映画"