我是laravel的新人。所以我试图从我的索引页面删除数据库中的记录。但它只删除具有最低主键值的记录,即我的id字段。 这是我的销毁功能的控制器代码:
public function destroy(Province $province)
{
//
$findProvince = DB::table('provinces')->where('id', $province->id)->delete();
if($findProvince){
return redirect()->route('provinces.index')->with('success', 'Province deleted successfully');
}
return back()->with('error', 'Province could not be deleted');
//var_dump($province->id);
}
这是我的观看代码:
@extends('layouts.app')
@section('content')
<div class="col-md-8 offset-md-2">
<br/>
<div>
<a href="provinces/create" class="btn btn-primary">Add New Province</a>
</div>
<br/>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Image</th>
<th scope="col">Operations</th>
</tr>
</thead>
<tbody>
@foreach($provinces as $province)
<tr>
<th scope="row">{{ $province->id }}</th>
<td>{{ $province->name }}</td>
<td><img src="../{{ $province->imgPath }}" width="200px"/></td>
<td>
<a href="provinces/{{ $province->id }}/edit" class="btn btn-warning">Edit</a> |
<a
class="btn btn-danger"
href="#"
onclick="
var result = confirm('Are you sure you wish to delete this province?');
if( result ){
event.preventDefault();
document.getElementById('delete-form').submit();
}
">Delete
</a>
<form id="delete-form" action="{{route('provinces.destroy', $province->id)}}" method="POST" style="display: none;">
<input type="hidden" name="_method" value="delete">
{{ csrf_field() }}
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
我尝试在$ province-&gt; id上使用var_dump,但它只输出最低的'id'值。
答案 0 :(得分:1)
id
是独一无二的。如果在循环中使用相同的id
,则会出现此意外行为。要么使用唯一ID,要么将按钮放在form
内(我建议这样做)。
<td>
<form class="delete-form" action="{{ route('provinces.destroy', $province->id) }}" method="POST">
<input type="hidden" name="_method" value="delete">
{{ csrf_field() }}
<a href="provinces/{{ $province->id }}/edit" class="btn btn-warning">Edit</a> |
<a class="btn btn-danger">Delete</a>
</form>
</td>
然后在单独的文件中使用此Javascript进行确认:
(function(){
let forms = document.querySelectorAll('form.delete-form');
[].forEach.call(forms, function(form){
form.onsubmit = function(e) {
if ( ! confirm('Are you sure you wish to delete this province?'))
return e.preventDefault();
}
});
})();
如果您仍想使用自己的方法,请将$province
的ID添加到表单的id
属性中。这会使您的表单独一无二,因此您可以使用id
访问它。
<form id="delete-form-{{ $province->id }}" ...>
然后你的Javascript:
if( result ){
event.preventDefault();
document.getElementById('delete-form-{{ $province->id }}').submit();
}
答案 1 :(得分:0)
感谢大家的帮助。对不起,我花了很长时间才回复。我真的很忙于其他学校。所以我设法用我的代码追查问题。这与我的观点有关。所有创建的删除表单都具有相同的ID。所以,如果我只是将记录ID添加到表单中。它工作得很好。