169 похожих чатов

Подскажите в чем разница между кастомным методом модели и аксессором

типа get{attr}Attribute?


public function getFullAddressAttribute(): string
{
return $this->country . ', ' . $this->city;
}

или


public function fullAddress(): string
{
return $this->country . ', ' . $this->city;
}

14 ответов

19 просмотров

В случае аксессора, будет работать: $model->full_adress

Egor Gruzdev
В случае аксессора, будет работать: $model->full_...

$model['full_adress'] функционал Appending https://laravel.com/docs/10.x/eloquent-serialization#appending-values-to-json и др. плюшки

и это старый вариант. надо новый юзать

DevilSAM- Автор вопроса
Adel
и это старый вариант. надо новый юзать

protected function firstName(): Attribute { return Attribute::make( get: fn (string $value) => ucfirst($value), ); } вот это? выглядит сложнее 😅

DevilSAM
protected function firstName(): Attribute { re...

зато это современно выглядит, плюс есть плюшки, например кэширования объектов

DevilSAM- Автор вопроса

интересно получается... у меня есть модель Акт и поле комментарий. я пишу: 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

DevilSAM- Автор вопроса
Egor Gruzdev
Метод должен быть protected

ничего не изменилось 🤷🏻‍♂️

DevilSAM- Автор вопроса
Egor Gruzdev
Метод должен быть protected

public function comment(): Attribute { return Attribute::make( get: fn (string $value) => ucfirst($value), ); } $act->comment; метод вызывается и срабатывает. Но почему он возвращает строку, а не Атрибут?🤔

DevilSAM
интересно получается... у меня есть модель Акт и ...

Когда свойство вызвал у тебя ок отработало, смотри типизацию, вместо стринга - нулл

DevilSAM
public function comment(): Attribute { return ...

суть данного метода вернуть уже преобразованные данные, зачем тебе аттрибут?

DevilSAM- Автор вопроса
Egor Gruzdev
суть данного метода вернуть уже преобразованные да...

Мне и не нужен Атрибут. Просто подумал, что раз указан Атрибут, то и вернуться должен он... и буду там с ним возиться потом... Но оказывается там уже об этом позабитились 😄

DevilSAM
Мне и не нужен Атрибут. Просто подумал, что раз ук...

Но ты и не метод вызываешь, а свойство, под капотом вызывается метод и тебе результат твоего гетера

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта