типа get{attr}Attribute?
public function getFullAddressAttribute(): string
{
return $this->country . ', ' . $this->city;
}
или
public function fullAddress(): string
{
return $this->country . ', ' . $this->city;
}
В случае аксессора, будет работать: $model->full_adress
$model['full_adress'] функционал Appending https://laravel.com/docs/10.x/eloquent-serialization#appending-values-to-json и др. плюшки
и это старый вариант. надо новый юзать
protected function firstName(): Attribute { return Attribute::make( get: fn (string $value) => ucfirst($value), ); } вот это? выглядит сложнее 😅
зато это современно выглядит, плюс есть плюшки, например кэширования объектов
интересно получается... у меня есть модель Акт и поле комментарий. я пишу: public function comment(): Attribute { return Attribute::make( get: fn (string $value) => ucfirst($value), ); } Далее пытаюсь вызвать так: $act->comment - мне в ответ выдает не Атрибут, а строку из БД а если так: $act->comment() - тут уже возвращает Атрибут. Странно как-то... Идем дальше: пишу метод myComment public function myComment(): Attribute { return Attribute::make( get: fn (string $value) => $this->comment, ); } Пытаюсь вызывать: $act->my_comment - ошибка Argument #1 ($value) must be of type string, null given вызываю так: $act->myСomment() - так работает. Но судя по документации не так всё должно быть.
Метод должен быть protected
ничего не изменилось 🤷🏻♂️
public function comment(): Attribute { return Attribute::make( get: fn (string $value) => ucfirst($value), ); } $act->comment; метод вызывается и срабатывает. Но почему он возвращает строку, а не Атрибут?🤔
Когда свойство вызвал у тебя ок отработало, смотри типизацию, вместо стринга - нулл
суть данного метода вернуть уже преобразованные данные, зачем тебе аттрибут?
Мне и не нужен Атрибут. Просто подумал, что раз указан Атрибут, то и вернуться должен он... и буду там с ним возиться потом... Но оказывается там уже об этом позабитились 😄
Но ты и не метод вызываешь, а свойство, под капотом вызывается метод и тебе результат твоего гетера
Обсуждают сегодня