сохранение нескольких значений флажков и сохранение в базе данных с помощью Laravel - PullRequest
0 голосов
/ 22 октября 2019

Привет, у меня есть этот флажок выбора, который является временем, когда я проверяю, все значение проходит через него! Теперь моя проблема заключается в том, что когда я сохраняю в базу данных, сохраняется только одно значение. это мой HTML

<p>Sunday</p>
                <input type="checkbox" name="select-all-sunday" id="select-all-sunday" onclick="toggle(this);"> Check All
                <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-1" value="00:00"> 00:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-2" value="1:00"> 1:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-3" value="2:00"> 2:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-4" value="3:00"> 3:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-5" value="4:00"> 4:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-6" value="5:00"> 5:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-7" value="6:00"> 6:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-8" value="7:00"> 7:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-9" value="8:00"> 8:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-10" value="9:00"> 9:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-11" value="10:00"> 10:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-12" value="11:00"> 11:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-13" value="12:00"> 12:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-14" value="13:00"> 13:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-15" value="14:00"> 14:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-16" value="15:00"> 15:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-17" value="16:00"> 16:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-18" value="17:00"> 17:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-19" value="18:00"> 18:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-20" value="19:00"> 19:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-21" value="20:00"> 20:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-22" value="21:00"> 21:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-23" value="22:00"> 22:00 <br>
                <input type="checkbox" name="checkbox-sunday[]" id="checkbox-24" value="23:00"> 23:00 <br>

теперь это мой контроллер

$sundays = $request->input('checkbox-sunday');

        foreach($sundays as $sunday){
            echo  $sunday.",";



        }

Теперь echo $ воскресенье, кажется, значение, передаваемое из формы, отображается правильно. Теперь при сохранении в базу данных сохраняется только одно значение.

Ниже приведен мой код при сохранении в базе данных

$sundays = $request->input('checkbox-sunday');

        foreach($sundays as $sunday){
            echo  $sunday.",";

            $postRoom = PostRoom::find($id);

            $postRoom->description = $request->get('description');
            $postRoom->checkin_date = $request->get('bookingDate');
            $postRoom->checkin_time = $request->get('checkinTime');
            $postRoom->room_price = $request->get('roomPrice');
            $postRoom->day_sunday = $sunday;
            $postRoom->your_neighbourhood = $request->get('yourNeighbourhood');

            $postRoom->save();

            return redirect('add-your-listing/next-step-3/'.$postRoom->id);



        }

Каков наилучший способ сохранить это значение? Кто-нибудь может мне помочь? ТИА.

Ответы [ 4 ]

0 голосов
/ 22 октября 2019

Ваша проблема основана на преобразовании массива в строку, вы можете использовать json_encode() или json_decode() для преобразования массива при сохранении и извлечении во время чтения, или для меня я использую serialize() и unserialize() для храненияи получить наборы массивов из базы данных как строковый тип данных.

//read the checkbox input from the form.
$sundaysArray = $request->input('checkbox-sunday');

//while saving 
$postRoom->day_sunday = json_encode($sundaysArray)  //or 
$postRoom->day_sunday = serialize($sundaysArray);

//while reading from database
$sundaysArray = json_decode($postRoom->day_sunday)  //or
$sundaysArray = unserialize($postRoom->day_sunday);

в любом случае это работает.

0 голосов
/ 22 октября 2019

Модель PostRoom

protected $fillable = [
        'bookingDate', 'description', 'checkinTime', 'roomPrice', 'day_sunday', 'your_neighbourhood'];

Код

     $sundays = $request->input('checkbox-sunday');
     $data = [];
     $hours = []
     foreach($sundays as $sunday){
           $hours[] = $sunday;
     }
     $room = PostRoom::find($id);
     $data['description'] = $request->get('description');
     $data['bookingDate'] = $request->get('bookingDate');
     $data['checkinTime'] = $request->get('checkinTime');
     $data['roomPrice'] = $request->get('roomPrice');
     $data['day_sunday'] = implode(', ' $hours);
     $data['your_neighbourhood'] = $request->get('yourNeighbourhood');
     $room->update($data);

     return redirect('add-your-listing/next-step-3/'.$room->id);
0 голосов
/ 22 октября 2019

В вашей модели PostRoom добавьте защищенную переменную $ casts со следующим

protected $casts = [
    'day_sunday' => 'array',
];

Затем обновите свой метод сохранения следующим образом

$postRoom = PostRoom::find($id);

$postRoom->description = $request->get('description');
$postRoom->checkin_date = $request->get('bookingDate');
$postRoom->checkin_time = $request->get('checkinTime');
$postRoom->room_price = $request->get('roomPrice');
$postRoom->day_sunday = $request->get('sundays');
$postRoom->your_neighbourhood = $request->get('yourNeighbourhood');

$postRoom->save();

Это сохранит данные в вашей базе данных какобъект json_encoded, но для вашего приложения laravel это массив. Когда вы прочитаете свойство $ postRoom-> day_sunday, оно вернет массив, совпадающий с массивом, возвращенным из контроллера.

0 голосов
/ 22 октября 2019

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

я попробую это.

    $sundays = $request->input('checkbox-sunday');

    $sundaysArray = array();

    foreach($sundays as $sunday){
       $sundaysArray[] = $sunday;
    }


    $postRoom = PostRoom::find($id);

    $postRoom->description = $request->get('description');
    $postRoom->checkin_date = $request->get('bookingDate');
    $postRoom->checkin_time = $request->get('checkinTime');
    $postRoom->room_price = $request->get('roomPrice');
    $postRoom->day_sunday = json_encode($sundaysArray);
    $postRoom->your_neighbourhood = $request->get('yourNeighbourhood');

    $postRoom->save();

    return redirect('add-your-listing/next-step-3/'.$postRoom->id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...