Laravel Flash Session

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
google+
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Sandaru. Hiện đang là một Full-Stack Developer. 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 rất thích chia sẻ những thứ kiến thức liên quan tới lĩnh vực này. Mong các bạn ủng hộ web của mình!

Bình luận qua Facebook