Package provides a simple way to use strongly typed enum objects with Laravel models. It utilizes Laravel's custom casting mechanism.
To install the package via Composer, simply run the following command:
composer require desmart/laravel-enum
Create an enum class that extends DeSmart\Laravel\Enumeration
. Then, simply define all possible values in form of
class constants:
class Character extends DeSmart\Laravel\Enumeration
{
const GOOD = 'good';
const EVIL = 'evil';
const SOMETIMES_GOOD_SOMETIMES_EVIL = 'sometimes_good_sometimes_evil';
}
In Laravel model:
class Hero extends Model
{
/**
* @var array
*/
protected $casts = [
'character' => Character::class,
];
}
That's it.
$hero = new Hero(['character' => Character::EVIL]);
dump($hero);
// Hero {#293
// ...
// #casts: array:1 [
// "character" => "Character"
// ]
// ...
// #attributes: array:1 [
// "character" => "evil"
// ]
// }
dump($hero->character);
// Character {#296
// -value: "evil"
// }
Package provides make:enum
Artisan command for enumeration classes auto-generation. To generate new enum class, run:
php artisan make:enum Character --cases='good,evil,sometimes_good_sometimes_evil'
--cases
(or-c
) option allows defining available enum cases. Command can be run without that option specified.
Above command will create a new class inside Enums
directory:
namespace App\Enums;
use DeSmart\Laravel\Enumeration\Enumeration;
/**
* @method static Character good()
* @method static Character evil()
* @method static Character sometimesGoodSometimesEvil()
*/
class Character extends Enumeration
{
const GOOD = 'good';
const EVIL = 'evil';
const SOMETIMES_GOOD_SOMETIMES_EVIL = 'sometimes_good_sometimes_evil';
}
Please see CHANGELOG for more information what has changed recently.
The MIT License (MIT). Please see License File for more information.