Аксессор (Accessor) в laravel нужен для создания кастомного поля модели. Это означает, что помимо полей из базы, будет доступно еще и искусственно добавленное поле.
Но, как известно, чтобы аксессор работал, к нему нужно обратиться.
Например, у нас есть аксессор:
public function getUserNameAttribute()
{
return $this->user()->get()[0]->name;
}
Работать он будет так:
echo $model->user_name;
Но что если у нас, например, API и надо генерировать его автоматически при получении данных? По хорошему, должен быть слой ресурсов, где будут четко заданы поля для вывода, там и будет обращение к конкретному аксессору. Но если API берет данные и сразу их отдает то решением этого вопроса будет свойство appends
. Добавляем в этой же модели свойство appends
в качестве массива и в ключах перечисляем нужные аксессоры (при условии что они есть). По примеру выше это будет так:
protected $appends = ['user_name'];
После этого аксессор не нужно будет вызывать, он будет подгружен в модель автоматически.
Ссылка на документацию - https://laravel.su/docs/8.x/eloquent-serialization#appending-values-to-json