Laravel: удаление данных с неправильным идентификатором

#javascript #php #laravel

#javascript #php #laravel

Вопрос:

Я использую кнопку удаления для удаления данных, но при удалении данных удаленные данные не соответствуют строкам, которые я имею в виду, но удаляемые данные — это данные, которые находятся в верхней части таблицы

когда я использую return $meja , вместо этого должен отображаться идентификатор 7, но идентификатор 1

Для получения дополнительной информации :

Вид :

 @foreach($data as $row)
    <tr>
        <th scope="row">{{$no  }}</th>
        <td>{{$row->no_meja}}</td>
        <td>{{$row->keterangan}}</td>
        <td>
            <a href="{{route('meja.edit',['meja'=>$row->id_meja])}}" class="btn btn-success"><i class="fas fa-edit"></i></a>
            <a href="#" data-id="" class="btn btn-danger confirm_script mr-3">
                <form action="{{ route('meja.destroy',['meja'=>$row->id_meja])}}" id="delete" method="POST">
                    @method('DELETE')
                    @csrf
                </form>
                <i class="fas fa-trash"></i>
            </a>
        </td>
    </tr>
@endforeach
 

вот мой javascript

 <script>
    $(".confirm_script").click(function(e) {
        // id = e.target.dataset.id;
        swal({
            title: 'Yakin hapus data?',
            text: 'Data yang dihapus tidak bisa dibalikin',
            icon: 'warning',
            buttons: true,
            dangerMode: true,
        })
        .then((willDelete) => {
            if (willDelete) {
                $('#delete').submit();
            } else {
                swal('Your imaginary file is safe!');
            }
        });
    });
</script>
 

Вот мой контроллер :

 public function destroy(Meja $meja)
{
    $meja->delete();
    return redirect()->route('meja.index')->with('destroy',' Berhasil dihapus!');
}
 

Вот мой маршрутизатор :

 Route::group(['prefix' => 'admin'], function() {
    Route::view('/','admin/dashboard.index');
    //---MASAKAN---//
    Route::resource('masakan','MasakanController');
 Route::post('admin/masakan/updatestatus/{masakan}','MasakanController@UpdateStatus')->name('masakan.updateStatus');
    //---MEJA---///
    Route::resource('meja','MejaController');
    //---ADMIN-ACCOUNT---/
    Route::resource('adminaccount','AdminController');   
});
 

Комментарии:

1. Если вы используете route типа ресурсов в meja, то почему вы отправляете id вместо этого, вы должны отправить объект meja.

2. Что вы пытались отладить проблему? Отправлен ли правильный идентификатор вашему контроллеру?

3. Одна рекомендация как старшего разработчика, пожалуйста, НЕ пишите код на другом языке, кроме АНГЛИЙСКОГО, у вас есть смесь английского и индонезийского (если Google верен), зачем вам писать на обоих языках? По крайней мере, придерживайтесь одного!

4. @NicoHaase яп, я пытался вернуть идентификатор следующим образом return $meja

5. return $meja вернет объект, а не идентификатор — но что это даст?

Ответ №1:

это из-за конфликта идентификаторов. у каждой вашей формы есть идентификатор delete , но в dom должен быть один элемент с идентификатором. когда вы используете sweet alert для отправки формы удаления, была отправлена самая первая форма с delete идентификатором, следовательно, первый элемент был удален. вместо этого используйте уникальный идентификатор или класс. пример для вас с использованием класса

форма

 <form action="{{ route('meja.destroy',['meja'=>$row->id_meja])}}" class="delete_form" method="POST">
    @method('DELETE')
    @csrf
</form>
 

сладкий код оповещения

 $('.delete_form').submit(function(event) {
    event.preventDefault();
    Swal.fire({
        title: 'Are you sure?',
        text: "You won't be able to revert this!",
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#3085d6',
        cancelButtonColor: '#d33',
        confirmButtonText: 'Yes, delete it!'
    }).then((result) => {
        if (result.isConfirmed) {
            event.currentTarget.submit();
        }
    })
});