Trong bài viết này, tôi sẽ hướng dẫn các bạn cách để format các Eloquent Attributes bằng cách sử dụng tính năng Laravel Accessors and Mutators.

Accessors được sử dụng để format các thuộc tính khi chúng ta truy vấn dữ liệu từ database. Trong khi đó, Mutators được sử dụng để format các thuộc tính trước khi lưu chúng vào database.

Sau đây, tôi sẽ hướng dẫn các bạn một ví dụ đơn giản để bạn hiểu rõ hơn về Laravel Accessors and Mutators.

Accessors 

Cho phép các developer có thể tạo ra một thuộc tính giả, mà chúng ta có thể truy cập như thể thuộc tính đó là một cột trong database của chúng ta.

Ví dụ, nếu database của bạn có bảng users, có 2 cột là first_name và last_name và bạn muốn hiển thị tên đầy đủ (full_name) gồm first_name và last_name thì nó sẽ như thế nào?

Nhiều bạn sẽ nghĩ đơn giản và thực hiện nó như sau:

{{ $user->first_name . " " . $user->last_name}}

Nếu bạn sử dụng cách trên ở nhiều nơi, chẳng may khách hàng muốn hiển thị last_name trước và first_name sau, bạn phải tìm lại tất chỗ hiển tên đầy đủ (full_name) và sửa lại như sau:

{{ $user->last_name . " " . $user->first_name}}

Thông qua một tình huống đơn giản trên, chúng ta thấy được sẽ rất mất thời gian để sửa lại mã nguồn rồi phải không. Bây giờ chúng ta hãy sử dụng Laravel Accessors thì sẽ như thế nào.

Cú pháp Accessors:

public function get{Attribute}Attribute()
{
    //
}

Ví dụ:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasFactory;
    /**
     * Get the user's full name.
     *
     * @return string
     */
    public function getFullNameAttribute()
    {
      return $this->first_name .  " "  . $this->last_name;
    }
}

Sau đó, bạn có thể hiển thị tên đầy đủ (full_name) với Accessors như sau:

{{ $user->full_name }}

Khi khách hàng thay đổi, bạn chỉ sửa ở hàm getFullNameAttribute() thôi. Như vậy, bạn đã thấy chúng ta đã tiết kiệm được rất nhiều thời gian rồi phải không?

Mutator

Cho phép các developer có thể set giá trị thuộc tính trước khi lưu chúng xuống database.

Giả sử, bạn muốn người dùng có thể nhập giá trị first_name tùy ý (có thể là chữ thường hoặc chữ in hoa), nhưng khi lưu xuống database tất cả các ký tự phải chuyển thành ký tự thường hết chẳng hạn.

Nhiều bạn nghĩ đơn giản và thực hiện nó như sau:

use App\Models\User;

$user= User::find(1);

$user->first_name = strtolower('ManhDanBlogs');

Nếu bạn sử dụng cách trên và thực hiện ở nhiều nói trong mã nguồn, chẳng may khách hàng yêu cầu lưu xuống database tất cả các ký tự thành chữ in hoa, bạn phải tìm lại những chỗ xử lý như trên và thay đổi như sau:

use App\Models\User;

$user= User::find(1);

$user->first_name = strtoupper('ManhDanBlogs');

Thông qua một tình huống đơn giản trên, chúng ta thấy được sẽ rất mất thời gian để sửa lại mã nguồn rồi phải không. Bây giờ chúng ta hãy sử dụng Laravel Mutator thì sẽ như thế nào.

Cú pháp Mutator:

public function set{Attribute}Attribute()
{
    //
}

Ví dụ:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasFactory;
    /**
     * Set the user's first name.
     *
     * @param  string  $value
     * @return void
     */
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }
}

Bây giờ, chúng ta có thể sử dụng điều này trong controller như sau:

use App\Models\User;

$user= User::find(1);

$user->first_name= 'ManhDanBlogs';

Khi khách hàng thay đổi, bạn chỉ sửa ở hàm setFirstNameAttribute() thôi. Như vậy, bạn đã thấy chúng ta đã tiết kiệm được rất nhiều thời gian rồi phải không?

Như vậy, chúng ta đã thực hiện xong một ví dụ đơn giản về Laravel Accessor and Mutator, tôi hy vọng hướng dẫn của tôi sẽ giúp ích cho công việc của bạn. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.

CÓ THỂ BẠN QUAN TÂM

Laravel UI Custom Email Password Reset Template

Laravel UI Custom Email Password Reset Template

Nếu bạn đang dùng thư viện laravel/ui để làm các chức năng liên quan đến authentication, và trong dự án của bạn, bạn cần thay đổi template email password reset thay vì sử dụng template email password...

Laravel One to Many Eloquent Relationship

Laravel One to Many Eloquent Relationship

One to Many Relationship được sử dụng trong trường hợp một dữ liệu của một bảng được liên kết với một hoặc nhiều dữ liệu ở bảng khác. Ví dụ, một bài post có thể có nhiều comment. Vì vậy, trong hướn...

Laravel 9 REST API With Sanctum Authentication

Laravel 9 REST API With Sanctum Authentication

Laravel Sanctum Laravel Sanctum cung cấp một hệ thống authentication đơn giản cho các SPA, ứng dụng Mobile và API đơn giản sử dụng token. Sanctum cho phép ứng dụng của bạn phát hành các mã token...

Laravel Export & Import CSV

Laravel Export & Import CSV

Trong bài viết này, tôi sẽ hướng dẫn các tạo cách Export hoặc Import CSV trong Laravel. Nhưng thay vì chỉ viết hàm đơn thuần trong PHP thì tôi sẽ hướng dẫn các tạo ra một Service trong Laravel bằng cá...

Laravel Socialite Login With Google

Laravel Socialite Login With Google

Google Google là một công cụ tìm kiếm trên internet. Nó sử dụng một thuật toán độc quyền được thiết kế để truy xuất và sắp xếp các kết quả tìm kiếm nhằm cung cấp các nguồn dữ liệu đáng tin cậy và ph...

Laravel TinyMCE 6 Image Upload

Laravel TinyMCE 6 Image Upload

TinyMCE TinyMCE là một trình soạn thảo  WYSIWYG  được xây dựng trên nền tảng Javascript, được phát triển dưới dạng mã nguồn mở theo giấy phép  MIT  bởi Tiny Technologies Inc. TinyMCE cho phép ngư...

Laravel Migration

Laravel Migration

Migration cho phép các nhà phát triển (Developer) nhanh chóng tạo ra cở sở dữ liệu của ứng dụng mà không cần vào màn hình quản lý cơ sở dữ liệu hay chạy bất kì một câu lệnh SQL nào. Trước hết, nếu...

Laravel Validation

Laravel Validation

Lợi thế lớn nhất của Laravel so với các Framework khác là Laravel tích hợp rất nhiếu tính năng được tích hợp sẵn. Trong bài viết này, chúng ta sẽ tìm hiểu về Laravel Validation. Chức năng Là một...

Integrating Google Gemini AI in Laravel

Integrating Google Gemini AI in Laravel

Google Gemini Gemini là một mô hình trí tuệ nhân tạo mới mạnh mẽ từ Google không chỉ có khả năng hiểu văn bản mà còn có thể hiểu cả hình ảnh, video và âm thanh. Gemini là một mô hình đa phương ti...

ManhDanBlogs