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: