Eloquent: Accessors & Mutators (Part 1)

LAMP Oct 27, 2020

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 valueSally. 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 gettersetter 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!!!!!!!!!!!

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.