Урок 10

Аксессоры, мутаторы и сериализация

Аксессоры

Аксессор преобразует значение при чтении из БД:

use Illuminate\Database\Eloquent\Casts\Attribute;

protected function title(): Attribute
{
    return Attribute::make(
        get: fn (string $value) => ucfirst($value),
    );
}

Теперь $post->title вернёт заголовок с большой буквы, даже если в БД он в нижнем регистре.

Мутаторы

Мутатор преобразует значение при записи в БД:

protected function title(): Attribute
{
    return Attribute::make(
        set: fn (string $value) => strtolower($value),
    );
}

Оба сразу

protected function title(): Attribute
{
    return Attribute::make(
        get: fn ($value) => ucfirst($value),
        set: fn ($value) => strtolower($value),
    );
}

Вычисляемые атрибуты

Если нужно добавить поле, которого нет в БД:

protected function fullName(): Attribute
{
    return Attribute::make(
        get: fn () => "{$this->first_name} {$this->last_name}",
    );
}

Добавление в JSON

Чтобы атрибут попал в JSON-ответ:

protected $appends = ['full_name'];

Скрытие атрибутов

protected $hidden = ['password', 'remember_token'];

Видимые атрибуты

Только указанные попадут в JSON:

protected $visible = ['id', 'name', 'email'];

Сериализация

$array = $post->toArray();
$json = $post->toJson();

При возврате модели из роута Laravel сам преобразует её в JSON.