从 Laravel 数据库中删除记录

问题描述 投票:0回答:1

当我尝试删除一条记录时,它总是删除数据库表中的最后一条记录,而不是我想要删除的记录。

我对 Laravel 相当陌生,我已经用尽了所有选择。

路线

Route::middleware('auth')->prefix('users')->name('users.')->group(function(){

           Route::delete('/deleterecord/{record}'[RecordsController::class, 'destroy'])->name('destroyrecord');

}

控制器

public function destroy(Records $record) {

        $record->delete();
        DB::commit();
            
        return redirect()->route('users.viewrecord')->with('success', 'Customer deleted     successfully');
}

查看

<!-- DataTales Example -->
       <div class="card shadow mb-4">
           <div class="card-header py-3">
               <h6 class="m-0 font-weight-bold text-primary">Records</h6>
           </div>
           <div class="card-body">
               <div class="table-responsive">
                   <table class="table-sm table-bordered" id="dataTable" width="100%" cellspacing="0">
                       <thead>
                           <tr>
                               <th width="10%">ID</th>
                               <th width="30%">Name</th>
                               <th width="15%">Student No</th>
                               <th width="10%">Batch No</th>
                               <th width="15%">Mobile</th>
                               <th width="20%">Email</th>
                               <th width="10%">Action</th>
                           </tr>
                       </thead>

                       <tbody>
                           @foreach ($records as $record)
                           <tr>
                               <td>{{ $record->id }}</td>
                               <td>{{ $record->name }}</td>
                               <td>{{ $record->student_number }}</td>
                               <td>{{ $record->batch_number }}</td>
                               <td>{{ $record->mobile_number }}</td>
                               <td>{{ $record->email }}</td>

                               <td style="display: flex">
                                   <a href="{{ route('users.editrecord', ['record' => $record->id]) }}" class="btn-sm btn-primary m-2">
                                       <i class="fa fa-pen"></i>
                                   </a>
                                   <a class="btn-sm btn-danger m-2" href="#" data-toggle="modal" data-target="#deleteRecordModal">
                                       <i class="fas fa-trash"></i>
                                   </a>
                               </td>
                           </tr>
                           @endforeach
                       </tbody>
                   </table>

               </div>
           </div>
       </div>
       </div>
@include('users.deleterecord-modal')

莫代尔

<div class="modal fade" id="deleteRecordModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalExample"
    aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="deleteModalExample">Delete Customer</h5>
                <button class="close" type="button" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">×</span>
                </button>
            </div>
            <div class="modal-body">Are you sure you want to delete?</div>
            <div class="modal-footer">
                <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
                <a class="btn btn-danger" href="{{ route('logout') }}"
                    onclick="event.preventDefault(); document.getElementById('record-delete-form').submit();">
                    Delete
                </a>
                <form id="record-delete-form" method="POST" action="{{ route('users.destroyrecord', $record->id) }}">
                    @csrf
                    @method('DELETE')
                </form>
            </div>
        </div>
    </div>
</div>

我尝试在控制器中运行

dd($record);
,它显示无论我删除哪条记录,总是被删除的ID是数据库表中的最后一个。

laravel routes laravel-blade
1个回答
0
投票

代码中的问题似乎来自于获取 $record->id 的方式。正如在您的模态代码中一样,您有

{{ 路线('users.destroyrecord', $record->id) }}

这将始终为您提供最后一条记录,因为此时

$record
的值将始终是最后一条记录。

根据您的代码,您似乎正在使用引导模式。我建议你在链接上有一个属性来表示当前的 id。现在删除按钮的代码将是:

 <button type="button" class="btn-sm btn-danger m-2" data-toggle="modal" data-target="#deleteRecordModal" data-id="{{ $record->id }}"> ... </button>

在这里,我建议使用按钮标签而不是锚标签。

现在,Bootstrap 中有一个名为

shown.bs.modal
的事件。在这种情况下,您应该能够获取该 data-id 属性并修改表单操作属性以将该 id 用于链接。

例如:(我在这里使用 jQuery,这在 Bootstrap 5 中不是必需的)

$('#deleteRecordModal').on('shown.bs.modal', function (e) {
   const recordId = $(e.target).data('id');
   $('#record-delete-form').attr('action', `/users/deleterecord/${recordId}`)
})
© www.soinside.com 2019 - 2024. All rights reserved.