Задать вопрос
@flammerman
Web Developer / И фронт и сервер

Как поставить значение по умолчанию атрибута модели в процессе update с fillable полями?

Приветствую всех

Не могу найти решение проблемы.

В общем есть поле в форме checkbox с именем "published" и значением 1, если он в состоянии "checked", логично, в update контроллера отправляется циферка 1 и этот код отрабатывает прекрасно
public function update(Request $request, $id)
    {    
        $this->model->find($id)->update($request->all());

        return back();
    }


Как только checkbox В состоянии not checked (просто галочку не поставили) update не происходит. По идее это нормально, нет галочки - нет поля "published" в Request объекте. Галочка стоит - получаем поле в реквесте published = 1 и апдейт происходит.

Вопрос вот в чем, можно ли как-то сделать обновление этого поля через модель !важно!
То есть имеем значение чекбокса = 1 - обновляем с единичкой, не имеем ничего в процессе update, - устанавливаем значение по умолчанию атрибута модели published = 0. Я уже как только не пробовал и через мутатор "setPublishedAttribute" и через protected $attributes - все тщетно.

Конечно есть варианты сделать через Select с 1 или 0. radio, или проверить реквест в контроллере, но не хотелось бы логику save/create/update выносить в контроллер. Да и во фронтенде есть отличный встроенный switch input в виде прикольного переключателя, но он завязан на input checkbox к сожалению =(
  • Вопрос задан
  • 105 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Yan-s
но не хотелось бы логику save/create/update выносить в контроллер

переопределите update() модели или добавьте в ней отдельный метод
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
pLavrenov
@pLavrenov
Разработка сайтов
1) Вместо $request->all() лучше использвать $request->only(['необходимые', 'поля', 'published'])
2) Мутаторы работают только с получаемыми данными из базы.
3) Самый просто и правильный вариант указать в миграции дефолтное значение == 0. тк значение может быть или 0 или 1 и никаким другим. И даже если в данных от фронтенда published не придет вообще save отработает правильно без ошибки от PDO
$table->integer('published')->default(0);
Ответ написан
Ваш ответ на вопрос

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

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