Laravel 10 Enum Model Attribute Casting Example

By Hardik Savani July 3, 2023 Category : Laravel

Hi Developer,

Today our leading topic is laravel 10 enum attribute casting example. you can see how to use enum in laravel 10. step by step explain how to use enums in laravel 10. Here you will learn laravel 10 enum cast.

In computer programming, an enum data type is a custom data type that allows a programmer to define a set of named values, which are typically treated as constants. An "enum" is short for "enumeration."

Enum data types are useful for defining a set of discrete values that an object or variable can take on. For example, you might define an enum called "Color" with values "Red," "Green," and "Blue." Then, you can use the "Color" enum type to create variables that can only take on one of those three values. This helps to ensure that your code uses consistent values and avoids errors due to mistyped or mismatched values.

If you want to use the enum data type in your table, you can create a migration and set the enum value there. However, if you later want to add another enum value, you will need to create a new migration and make the change. Laravel 10 introduces the enum model attribute casting, which allows you to create an enum class and set a cast on the model. Below, you can find a step-by-step example to learn how to use this feature.

In this example, first, we will create migration with string column "status" and default value will be "pending". Then we will create a model with a casting to set enum class. Then we will create enum class with specific values and use on model cast. so let's see simple example and learn it.

Step 1: Install Laravel

This is optional; however, if you have not created the laravel app, then you may go ahead and execute the below command:

composer create-project laravel/laravel example-app

Step 2: Create Migration

Here, we need create database migration for "products" table with name, body and status columns and also we will create model for products table.

php artisan make:migration create_products_table

database/migrations/2022_07_11_141714_create_products_table.php

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;

return new class extends Migration

{

/**

* Run the migrations.

*

* @return void

*/

public function up(): void

{

Schema::create('products', function (Blueprint $table) {

$table->id();

$table->string('name');

$table->text('body');

$table->string('status')->default('pending');

$table->timestamps();

});

}

/**

* Reverse the migrations.

*

* @return void

*/

public function down(): void

{

Schema::dropIfExists('products');

}

};

Then run migration command to create items table.

php artisan migrate

Step 3: Create Enum Class

In this step, we will create ProductStatusEnum.php class and define all enum values. let's create model and update following code:

app/Enums/ProductStatusEnum.php

<?php

namespace App\Enums;

enum ProductStatusEnum:string {

case Pending = 'pending';

case Active = 'active';

case Inactive = 'inactive';

case Rejected = 'rejected';

}

Step 4: Create Model

In this step, we will create Product.php model with cssting. let's create model and update following code:

php artisan make:model Product

App/Models/Product.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

use App\Enums\ProductStatusEnum;

class Product extends Model

{

use HasFactory;

/**

* Write code on Method

*

* @return response()

*/

protected $fillable = [

'name', 'body', 'status'

];

/**

* Write code on Method

*

* @return response()

*/

protected $casts = [

'status' => ProductStatusEnum::class

];

}

Step 5: Create Route

In third step, we will create one route for testing. so create one route here.

routes/web.php

<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ProductController;

/*

|--------------------------------------------------------------------------

| Web Routes

|--------------------------------------------------------------------------

|

| Here is where you can register web routes for your application. These

| routes are loaded by the RouteServiceProvider within a group which

| contains the "web" middleware group. Now create something great!

|

*/

Route::get('product-test', [ProductController::class, 'index']);

Step 6: Create Controller

In this step, we will create ProductController file and write index() method to create item records with array and access as array.

app/Http/Controllers/ProductController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Product;

class ProductController extends Controller

{

/**

* Write code on Method

*

* @return response()

*/

public function index()

{

$input = [

'name' => 'Gold',

'body' => 'This is a Gold',

'status' => ProductStatusEnum::Active

];

$product = Product::create($input);

dd($product->status, $product->status->value);

}

}

Run Laravel App:

All the required steps have been done, now you have to type the given below command and hit enter to run the Laravel app:

php artisan serve

Now, Go to your web browser, type the given URL and view the app output:

http://localhost:8000/product-test

You can see database output and print variable output:

Database Output:

Output:

App\Enums\ProductStatusEnum {#1250

name: "Active"

value: "active"

}

active

I hope it can help you...