Ba mức độ, chọn theo độ phức tạp của phép biến đổi.
1. Cast dựng sẵn — khai báo trong casts(), xử lý kiểu phổ thông. Đây là chỗ nên đặt datetime, boolean, array, encrypted, và cả backed enum của PHP 8.1:
php
protected function casts(): array
{
return [
'is_active' => 'boolean',
'meta' => 'array',
'status' => OrderStatus::class, // backed enum
'paid_at' => 'datetime',
];
}- **2.
- Accessor / mutator bằng
Attribute— biến đổi một cột** theo logic riêng. - Từ Laravel 9 dùng một method duy nhất trả về
Attribute:
php
protected function fullName(): Attribute
{
return Attribute::make(
get: fn (mixed $value, array $attrs) => $attrs['first_name'].' '.$attrs['last_name'],
set: fn (string $value) => ['first_name' => explode(' ', $value)[0]],
);
}3. Custom cast — class implement CastsAttributes với get/set, tái sử dụng được trên nhiều model. Dùng khi cần map cột sang value object (Money, Coordinates) hoặc mã hoá dạng riêng.
Điểm dễ sai: giá trị cast sang object được cache trong bộ nhớ của model, nên sửa property của object trả về không tự đánh dấu model là dirty; phải gán lại cả object (hoặc khai báo withoutObjectCaching trên class cast).