当我尝试删除一条记录时,它总是删除数据库表中的最后一条记录,而不是我想要删除的记录。
我对 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是数据库表中的最后一个。
代码中的问题似乎来自于获取 $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}`)
})