Задать вопрос
@Maxwelss

Почему не видит ключ в массиве?

Я получаю массив, через dd его проверяю, все ок, получаю идентификатор дня.
dd($day['day']);
632cbf90972b9677985274.jpeg

Но при попытке добавить его бд, получаю ошибку.
Undefined array key "day"

foreach ($days  as $day){
            Day::create([
                'day_id' => $day['day'],
                'start_time' => $day['start'],
                'end_time' => $day['end'],
            ]);
        }
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 3
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Вы всё еще мучаетесь? =))

Дело в том, что невыбранный чекбокс не отправляется.
В самом ларавел можно использовать хуки в запросах и модифицировать входящие данные до валидации.
Если это кажется сложным или просто не хочется, то существует своего рода хак, чтобы исправить подобное поведение чекбоксов.

<input type="hidden" value="0" name="days[{{$key}}][day]">
<input type="checkbox" value="1" name="days[{{$key}}][day]"> {{$value}}


Если в форме присутствуют два поля с одинаковым именем, то будет отправлено последнее из них. То есть, если чекбокс выбран, то будет отправлено значение "1", если нет, то отправится значение "0".
Таким образом, в приходящем массиве у вас всегда будет заполненное поле.
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Добавьте валидацию данных:
foreach ($days as $day) {
    if (isset($day["day"]) && isset($day["start"]) && isset($day["end"])) {
        Day::create([
            "day_id" => $day["day"],
            "start_time" => $day["start"],
            "end_time" => $day["end"],
        ]);
    }
}
Ответ написан
Комментировать
@lil_koi
лучший из худших
ну если у тебя цикл из нескольких эллементов, логично препдоположить, что в первом элементе у тебя есть этот ключ, в каком-то другом нет. Засунь в цикл dump($day['day']);и посмотри, что у тебя там лежит(во время дампа, закоментируй создание Day
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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