DEV Community

Cover image for How to generate PHP enums from database in Laravel?
Richard Dobroň
Richard Dobroň

Posted on • Edited on

3

How to generate PHP enums from database in Laravel?

A magic number is a configuration parameter typed as a number in the middle of some code.

And that magic number is a bad thing.

Using this library, you will fix the following code:

<?php
class User
{
// ...
public function hasRole(int $roleId): bool
{
return $this->roleId === $roleId;
}
public function isAnalyst(): bool
{
return $this->roleId === 5;
}
}
// ...
$user->hasRole(1);

To such:

<?php
use App\Enums\UserRoleTypes;
class User
{
// ...
public function hasRole(int $roleId): bool
{
return $this->roleId === $roleId;
}
public function isAnalyst(): bool
{
return $this->roleId === UserRoleTypes::INSIGHTS_ANALYST;
}
}
// ...
$user->hasRole(UserRoleTypes::MANAGER);

How to use this generator?

First of all, install composer package:



composer require dobron/laravel-db-enum-generator


Enter fullscreen mode Exit fullscreen mode

Let's say the user_roles database table has the following structure:

Id Slug Role
1 MANAGER Admin
2 CONTENT_CREATOR Editor
3 MODERATOR Moderator
4 ADVERTISER Advertiser
5 INSIGHTS_ANALYST Analyst

Now call artisan command make:enum.



# with laravel model
php artisan make:enum UserRoleTypes --model=UserRole --id=Id --slug=Slug --title=Role

# with laravel model that does not have slug column (will be auto-generated from --title)
php artisan make:enum UserRoleTypes --model=UserRole --id=Id --title=Role

# with database table
php artisan make:enum UserRoleTypes --table=user_roles --id=Id --slug=Slug --title=Role

# etc.


Enter fullscreen mode Exit fullscreen mode

The UserRoleTypes.php file was generated in the ./app/enums/ directory.
If you update the database table, just use the same command with the --force flag to overwrite the file.

<?php
/**
* This file is generated. Do not modify it manually!
*
* This file was generated by:
* php artisan make:enum App\Models\UserRoleTypes --model=UserRole --id=Id --slug=Slug --title=Role
* If there is a newer version, run:
* php artisan make:enum App\Models\UserRoleTypes --model=UserRole --id=Id --slug=Slug --title=Role --force
*/
namespace App\Enums;
class UserRoleTypes
{
public const MANAGER = 1;
public const CONTENT_CREATOR = 2;
public const MODERATOR = 3;
public const ADVERTISER = 4;
public const INSIGHTS_ANALYST = 5;
public static function map(): array
{
return [
static::MANAGER => 'Admin',
static::CONTENT_CREATOR => 'Editor',
static::MODERATOR => 'Moderator',
static::ADVERTISER => 'Advertiser',
static::INSIGHTS_ANALYST => 'Analyst',
];
}
}

How to find magic numbers in the project?

I recommend using a library called PHPMND.

This stands for PHP Magic Number Detector.

A detailed installation guide can be found at https://github.com/povils/phpmnd

But if you're using Composer, here's how you can install it quickly:



composer require --dev povils/phpmnd


Enter fullscreen mode Exit fullscreen mode

Once that's done, you run it like this:



phpmnd .


Enter fullscreen mode Exit fullscreen mode

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay