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

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

типа get{attr}Attribute?


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

или


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

14 ответов

6 просмотров

В случае аксессора, будет работать: $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
Мне и не нужен Атрибут. Просто подумал, что раз ук...

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
35
How to create an OS in C? what to study?
Linus
18
читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
а чем хуже?
Alexey Kulakov
10
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Всем привет, передавал ли кто-нибудь File с рендер процесса в main? Просто виснет js. Где именно я без понятия. Не отрабатывают никакие логи. Как только я передаю обычный масс...
Ilya Ilya
4
Карта сайта