Отправка идентификатора из ajax в контроллер для удаления данных - PullRequest
1 голос
/ 07 апреля 2019

Я получаю данные некоторых пользователей из базы данных через Ajax.Я добавил несколько флажков в таблицу для удаления данных.Я пишу код для этого, но я не знаю, как отправить идентификатор пользователя из ajax на контроллер. Было бы хорошо, если кто-то мне поможет.Ниже мой код

// Javascript

$(document).ready(function() {

            $(document).ready(function () {
                $.ajaxSetup({
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    }
                });
            });

            $('select[name="class_id"]').on('change', function() {
                var classID = $(this).val();
                if(classID) {

                    $.ajax({

                        url: '/attendance/ajax/'+classID,
                        type: "GET",
                        dataType: "json",
                        success:function(data) {

                            var markup = '';
                        markup += '<tr><th style="width: 2%" class="align-middle text-center"><input type="checkbox" id="options"></th><th style="width: 2%" class="align-middle text-center">#</th> <th style="width: 15%" class="text-center">Student ID<input type="text" class="form-control" disabled></th> <th style="width: 15%" class="text-center">Student Name<input type="text" class="form-control" disabled></th> <th style="width: 15%" class="text-center">Attendance<input type="text" class="form-control" disabled></th> <th style="width: 15%" class="text-center">Date<input type="text" class="form-control" disabled></th> <th style="width: 15%;" class="align-middle text-center">Actions</th> <tr>';

                        $.each(data, function(key, value) {

                            markup += '<tr> <td><input class="checkBoxes" type="checkbox" name="checkBoxArray[]"></td> <td><input type="hidden" value="'+value.id+'" name="id[]">' + value.id + '</td> <td><input type="hidden" value="'+value.student_id+'" name="student_id[]">' + value.student_id + '</td> <td><input type="hidden" value="'+value.first_name+'" name="first_name[]"><input type="hidden" value="'+value.last_name+'" name="last_name[]">' + value.first_name+ ' '  + value.last_name +  '<td><input type="hidden" value="'+value.attendance+'" name="attendance[]">' + value.attendance + '</td>' +  '<td><input type="hidden" value="'+value.created_at+'" name="created_at[]">' + value.created_at + '</td>' + '<td style=" width=12%" class="text-center"> <a><button title="Edit" class="btn btn-outline-primary"><span class="fas fa-pencil-alt"></span></button></a> </td>' +  '</td> <tr>';

                        });
                            $('table[id="studentsData"]').html(markup);
                        }
                    });
                }
            });
        });

// Отправить кнопку для удаления

<form method="post" action="delete/attendance" class="form-inline">

            {{csrf_field()}}

            {{method_field('delete')}}



            <div class="form-group">
                <select name="checkBoxArray" id="" class="form-control">

                    <option value="">Delete</option>

                </select>
            </div>

            <div class="form-group">

                <input type="submit" name="delete_all" class="btn btn-primary">

            </div>
        </form>

// Маршрут

Route::delete('/students/delete/attendance', 'AttendanceController@deleteAttendance');

// Контроллер

 public function deleteAttendance(Request $request, $id) {
        if ($request->delete_single) {
            $this->destroy($id);
        }
        if(isset($request->delete_all) && !empty($request->checkBoxArray)) {

            $attendances = StudentsAttendance::findOrFail($request->checkBoxArray);

            foreach($attendances as $attendance) {

                $attendance->delete();

            }

            return redirect()->back();

        } else {

            return redirect()->back();

        }
    }

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Поскольку вы хотите отправить набор идентификаторов в свое действие, сначала создайте POST-маршрут:

Route::post('/students/delete/attendance', 'AttendanceController@deleteAttendance');

Затем вы должны прикрепить id к каждому флажку, например:

<input class="checkBoxes" type="checkbox" name="checkBoxArray[]" value="'+value.id+'">

И обновите действие формы:

<form method="post" action="/students/delete/attendance" class="form-inline">

Попробуйте и проверьте, получаете ли вы все выбранные идентификаторы в вашем действии deleteAttendance, добавив dd() вверху:

public function deleteAttendance(Request $request, $id) {
    dd( $request->checkBoxArray );

    ...
}
0 голосов
/ 07 апреля 2019

Ваш адрес ajax отличается от вашего маршрута.

ajax : /attendance/ajax/{id}
route : /students/delete/attendance

если мы следуем той же инструкции от контроллера, ему нужен идентификатор, поэтому измените URL-адрес ajax на: '/students/delete/attendance/' +classID

Ваш тип ajax неправильный, замените GET на DELETE (аналогично маршруту).

тогда ваш маршрут не использует ID, а ваш пароль для маршрутизации и контроллер с идентификатором.

Route::delete('/students/delete/attendance/{id}', 'AttendanceController@deleteAttendance');

на вашем контроллере просто сделайте:

public function deleteAttendance(Request $request, $id) {
    $query = StudentsAttendance::findOrFail($id);
    $query->delete();
}

если вы хотите удалить нескольких учеников, это будет другой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...