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

Method WhereAny / WhereAll  in Laravel Eloquent

Method WhereAny / WhereAll in Laravel Eloquent

New Laravel 10: Eloquent WhereAny() và WhereAll() Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ li...

Google Drive as Filesystem in Laravel

Google Drive as Filesystem in Laravel

Đối với một số dự án, bạn cần phải sử dụng Google Drive (với tài khoản @gmail.com cá nhân hoặc tài khoản G Suite) làm nhà cung cấp bộ nhớ trong các dự án Laravel. Trong bài đăng này, tôi sẽ hướng d...

Integrating elFinder into TinyMCE 6 in Laravel

Integrating elFinder into TinyMCE 6 in Laravel

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ười d...

Amazon S3 Pre-Signed URL with DropzoneJs in Laravel

Amazon S3 Pre-Signed URL with DropzoneJs in Laravel

Chức năng upload file hay hình ảnh là một chức năng rất phổ biến, hầu hết các dự án đều có chức năng này. Đa số các nhà phát triển khi thực hiện chức năng upload file, thường sẽ sử dụng cách làm nh...

Integrating CKFinder with Amazon S3 in Laravel

Integrating CKFinder with Amazon S3 in Laravel

CKFinder 3 CKFinder 3 là trình quản lý tập tin được tích hợp với CKEditor 4 và CKEditor 5. Nó giúp bạn dễ dàng đưa các tập tin và hình ảnh vào nội dung của Editor một cách an toàn. Đây là một tín...

Laravel Middlewares

Laravel Middlewares

Middleware cung cấp một cơ chế thuận tiện để lọc các yêu cầu HTTP gửi đến ứng dụng bạn. Nó là một lớp trung gian nằm giữa request và controller. Bạn có thể thêm các xử lý logic trước khi gửi đến contr...

Integrating AI Assistant with CKEditor 5 in Laravel using Vite

Integrating AI Assistant with CKEditor 5 in Laravel using Vite

OpenAI OpenAI là một công ty nghiên cứu và triển khai trí tuệ nhân tạo, nổi tiếng với việc phát triển các mô hình AI tiên tiến. Mục tiêu của OpenAI là đảm bảo rằng trí tuệ nhân tạo tổng quát (AGI...

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...

Simplify Your Laravel Workflow with Laravel Pint

Simplify Your Laravel Workflow with Laravel Pint

Laravel Pint là gì? Laravel Pint là một công cụ sửa đổi mã nguồn của bạn để mã nguồn của bạn tuân thủ theo các tiêu chuẩn. Nói một cách khác, Laravel Pint sẽ quét toàn bộ mã nguồn của bạn, phát...

ManhDanBlogs