@NikSIk31

Автоматически задать новое свойство через setter?

как можно в laravel задать сеттер модели чтобы оно автоматом задавало новое значение коллекции, которого нету в БД?
например у меня есть автоматом изменение свойства через геттер:
я просто в моделе задал appends и геттер функцию
protected $appends = ['created_at'];

public function getCreatedAtAttribute($value)
    {
        return Date::parse($value)->format('d F в H:i');
    }


таким образом мне достаточно просто получить значения из БД и у меня будет спарсена дата. А как сделать тоже самое но чтобы было новое свойство?
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Намекну что лучше не привыкать учить модель делать то, что она не умеет, потому что она и без того в ларавеле несёт бешенный функционал, а написать свой класс в который класть модель на вход и в конструкторе заполнять данными из неё. И там это свойство сделать и другие модули опереть уже на свой класс, который ничего кроме взять-положить не умеет. Потому что такой лишенный функционала класс можно без проблем оставить навечно, т.к. он всегда будет выполнять задачу "дать-взять", в отличии от модели ларавеля которая умеет слишком много и отказ от неё будет означать мозговой штурм и попытки залепить получившиеся дыры скотчем

Но если прямо очень хочется модель то прям вот так и сделай

protected $appends = ['created_at2'];
getCreatedAt2Attribute() {}

если нужно чтобы сохранялось в базу - нужно записать в массив $this->attributes[ $name ] = $value; потом вызвать save();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы