Аксессоры, мутаторы и сериализация
Аксессоры
Аксессор преобразует значение при чтении из БД:
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.