最近我开始使用Laravel 5.2,我正在尝试删除按钮,这将删除数据库中的行。非常基本和琐碎,但似乎我做不到。
我正在关注删除文档:https://laravel.com/docs/5.2/queries#deletes
我已经做到了。我的路线:
Route::post('flags/destroy/{delete}', 'FlagsController@destroy')->name('admin.flags.destroy');
视图中的按钮
{!! Html::linkRoute('admin.flags.destroy', 'Delete', $flag->report_id) !!}
和控制器
public function destroy(Request $request){
$report = $request['report_id'];
Report::find($report);
$report->delete();
$request->session()->flash('alert-success', ' Report is deleted successfully.');
return redirect()->route('admin.flags');
}
我尝试过其他线程的解决方案,但我总是遇到错误:
compile.php第8936行中的MethodNotAllowedHttpException:
新错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'reports.id' in 'where clause' (SQL: select * from `reports` where `reports`.`id` is null limit 1
为什么要搜索id
而不是report_id
?
更新:
按钮
{!! Html::linkRoute('admin.flags.destroy', 'Delete', $flag->report_id) !!}
控制器
public function destroy(Request $request){
$report = $request['report_id'];
dd( $request->input('delete'));
Report::where('report_id', $report)->first();
$report->delete();
$request->session()->flash('alert-success', ' Report is deleted successfully.');
return redirect()->route('admin.flags');
}
路线
Route::get('flags/destroy/{delete}', 'FlagsController@destroy')->name('admin.flags.destroy');
更新2:这似乎有效但是足够安全吗? 视图:
{!! Form::open(array('route' => array('admin.flags.destroy', $flag->report_id), 'method' => 'get')) !!}
<button type="submit">Delete</button>
{!! Form::close() !!}</td>
控制器
public function destroy($report_id){
Report::destroy($report_id);
//$request->session()->flash('alert-success', ' Report is deleted successfully.');
return redirect()->route('admin.flags');
}
答案 0 :(得分:4)
我认为您的代码需要更新如下:
public function destroy($delete){
$report = $delete;
$rsltDelRec = Report::find($report);
$rsltDelRec->delete();
$request->session()->flash('alert-success', ' Report is deleted successfully.');
return redirect()->route('admin.flags');
}
希望这对你有用!
答案 1 :(得分:1)
您正在使用get
路线创建post
链接。将其更改为:
Route::get('flags/destroy/{delete}', 'FlagsController@destroy')->name('admin.flags.destroy');
答案 2 :(得分:1)
MethodNotAllowedHttpException
表示您尝试使用错误方法访问路由。如果您使用Html::linkRoute
,则会生成锚点,但在路线中您已定义Route::post
。您需要将Route::post
替换为Route::get
。但是如果你想让它更安全,你需要使用删除按钮和CSRF令牌创建简单的表单。
<form method="POST" action="{{ URL::route('admin.flags.destroy', {'delete' => $flag->report_id}) }}">
{{ csrf_field() }}
<!-- submit button -->
</form>
为什么要搜索id而不是report_id?
您需要替换
Report::find($report);
带
$report = Report::where('report_id', $report)->first();
public function destroy(Request $request){
$report = $request['report_id'];
....
您在此处尝试访问请求中的report_id
,但在您将参数命名为delete
答案 3 :(得分:1)
试试这个:
控制器:
public function destroy(Report $report){
$report->delete();
return redirect()->route('admin.flags');
}