Eloquent: Accessors & Mutators (Part 1)
Giới thiệu
Accessors và Mutators cho phép bạn format các giá trị thuộc tính của Eloquent khi lấy ra hoặc thêm vào model.
Accessors & Mutators
Accessors
Để định nghĩa 1 accessor, bạn hãy tạo 1 phương thức getFooAttribute
trong model với Foo
là tên của trường mà bạn muốn truy cập. Trong ví dụ này, mình định nghĩa 1 accessor cho thuộc tính first_name
:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Get the user's first name.
*
* @param string $value
* @return string
*/
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
}
Accessor sẽ tự động được gọi bởi Eloquent khi lấy giá trị của thuộc tính first_name:
$user = App\Models\User::find(1);
$firstName = $user->first_name;
Bạn cũng có thể sử dụng accessor để trả về các giá trị mới được tính toán từ các thuộc tính hiện có:
/**
* Get the user's full name.
*
* @return string
*/
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
$fullName = $user->full_name;
Mutators
Để định nghĩa 1 mutator, trước tiên bạn hãy tạo 1 phương thức setFooAttribute
trong model với Foo
là tên của trường mà bạn muốn truy cập. Mình tiếp tục khởi tạo 1 mutator cho thuộc tính first_name
:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Set the user's first name.
*
* @param string $value
* @return void
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
Mutator này sẽ được tự động gọi khi set giá trị cho thuộc tính first_name
trên model. Ví dụ, set thuộc tính first_name
thành Sally
:
$user = App\Models\User::find(1);
$user->first_name = 'Sally';
Trong ví dụ này, hàm setFirstNameAttribute
sẽ được gọi với value là Sally
. Sau đó, mutator sẽ áp dụng hàm strtolower
và gán giá trị cho first_name trong mảng $attribute
nội bộ.
Kết Luận
Nếu bạn đã từng làm việc với bất kỳ ngôn ngữ hướng đối tượng nào, chắc hẳn bạn cũng đã quen thuộc với hai phương thức getter và setter rồi đúng không? Bạn có thể xem accessor như là phương thức getter, còn mutator như là phương thức setter.
Accessors và Mutators được sử dụng khá nhiều trong các project. Hy vọng bài viết này sẽ đem lại thông tin hữu ích cho các bạn...
Hẹn gặp lại ở các bài viết sau!!!!!!!!!!!