Eloquent Mutators and Accessors in Laravel 9 Example

Feb 12, 2022 . Admin



Hi Dev,

In this example i will learn you laravel 9 accessor and mutator example. I explained simply step-by-step laravel 9 accessor and mutator example. Here, we will implement a laravel 9 accessor and mutator. In this article, we'll go through mutators and accessors of the eloquent orm in the laravel 9 web framework.

So, mutators and accessors sanction you to alter data afore it's preserved to and fetched from a database. To be categorical, the mutator sanctions you to alter data afore it's preserved to a database. On the other hand, the accessor sanctions you to alter data after it's fetched from a database.

The Laravel model is the central place where you can engender mutator and accessor methods. And of course, it's nice to have all your modifications in a single place rather than scattered over different places.

So let's start following example.

Step 1: Download Laravel

Let us begin the tutorial by installing a new laravel application. if you have already created the project, then skip following step.

composer create-project laravel/laravel example-app
Step 2 : Create Migration and Model

Here, we will update migration with adding new column publish_date for "posts" table, let's update code on following file.

database/migrations/2014_10_12_000000_create_posts_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()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->text('body');
            $table->date('publish_date');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
};

Next, run create new migration using laravel migration command as bellow:

php artisan migrate

Now we will update Post model by using following command:

app/Models/Post.php
<?php
  
namespace App\Models;
  
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Carbon\Carbon;
  
class Post extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array

     */
    protected $fillable = [
        'title',
        'body',
        'publish_date'
    ];
  
    /**
     * Interact with the user's first name.
     *
     * @param  string  $value
     * @return \Illuminate\Database\Eloquent\Casts\Attribute
     */
    protected function publishDate(): Attribute
    {
        return new Attribute(
            get: fn ($value) =>  Carbon::parse($value)->format('m/d/Y'),
            set: fn ($value) =>  Carbon::parse($value)->format('Y-m-d'),
        );
    }
}
Step 3 : Create Controller

Let's create PostController by following command:

php artisan make:controller PostController
app/Http/Controllers/PostController.php
<?php
  
namespace App\Http\Controllers;
  
use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function create()
    {
        $input = [
            'title' => 'PHP',
            'body' => 'This is a Nice Language.',
            'publish_date' => '02/12/2022'
        ];
  
        $post = Post::create($input);
   
        dd($post);
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function show()
    {
        $post = Post::first();
  
        dd($post->toArray());
    }
}
Step 4: Create and Add Routes

Next, You have to open and update the following routes in the routes/web.php file.

routes/web.php
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group that
| contains the "web" middleware group. Now create something great!
|
*/

Route::controller(PostController::class)->group(function(){
    Route::get('create-post', 'create');
    Route::get('get-post', 'show');
});
Run Laravel App:

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

php artisan serve

Now, you have to open web browser, type the given URL and view the app output:

http://localhost:8000/create-post

It will create post as like bellow screen shot:

Output for Accessor:

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

http://localhost:8000/get-post

It will create post as like bellow screen shot:

array:6 [
    "id" => 1
    "title" => "Laravel"
    "body" => "This is a php Framework."
    "publish_date" => "03/12/2022"
    "created_at" => "2022-02-12T10:20:45.000000Z"
    "updated_at" => "2022-02-12T10:20:45.000000Z"
]

I hope it can help you...

#Laravel 9