Làm thứ làm cho Laravel Request của bạn thú vị hơn

Laravel Eloquent – Accessor và Mutator

Chào các bạn,

Nay mình đi qua tiếp phần nữa của Laravel nhé. Lần này là Laravel Accessor và Mutator.

Phần này cũng khá là hay và thú vị đấy 😀

1/ Giới thiệu về Accessor và Mutator

Accessor và Mutator hỗ trợ ta format giá trị khi get/set value từ Eloquent instance. (Hiểu đơn giản nhất :D)

Full introduction: https://laravel.com/docs/5.6/eloquent-mutators#introduction

2/ Khởi tạo Accessor

Ví dụ mình có 2 column là FirstName và LastName trong table User. Giờ mình muốn lấy ra full name.

Với bình thường:

// Normal case when you use 
$full_name = $user->FirstName + " " + $user->LastName;

Với Eloquent – Accessor:

// In eloquent
public function getFullNameAttribute() {
    return "{$this->FirstName} {$this->LastName}";
}

// usage:
$user->full_name (Snake case = true)
$user->FullName (Snake case = false)

Với accessor, ta có thể truy  cập Full Name bất cứ lúc nào và tránh dup code, reusable.

Rất đơn giản phải không nào? 😀

3/ Khởi tạo Mutator

Ví dụ mình muốn nhập FirstName, mà lúc nào chữ cái đầu cũng phải in hoa.

Với bình thường:

// Normal case
$user->FirstName = ucfirst($fname);

Với Eloquent – Mutator:

public function setFirstNameAttribute($value) {
    $this->attributes['FirstName'] = ucfirst($value);
}

// Usage:
$user->FirstName = "seth"; (Snake case = false) - KQ: Seth
$user->first_name = "seth"; (Snake case = true)

Cũng như accessor, ta có thể set value bất cứ lúc nào và có khả năng reusable cao.

4/ Final trick

Ta cũng có thể sử dụng Accessor dưới dạng 1 COLUMN và gán nó vào Relationship method như sau:

Ví dụ mình có UserProfile, có column Identify lưu theo format sau: email-userId ([email protected])

Và mình sẽ tạo Accessor như sau:

public function getUserTypeAttribute()
    {
        return "{$this->Email}-{$this->ID}";
    }

Và tiếp tục tới Relationship method:

public function UserProfile()
    {
        // Use: ApplicationTypeName
        return $this->hasOne("UserProfileModel", "Identify", "UserType");
    }

Test và cảm nhận ngay nào 😀

5/ Kết luận

Đây là các bước cơ bản về Accessor và Mutator, vẫn còn 1 phần Date Mutator nữa mà mình sẽ để bài sau 😀

Khi sử dụng Accessor và Mutator, chúng ta phải cưc kỳ cẩn thận về vụ Snake Case.

Các bạn có thể set Snake Case cho Eloquent thông qua property sau trong Eloquent Model:

static $snakeAttributes = false;

Cám ơn các bạn đã theo dõi nhé!

Related Eloquent Topics:

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook