使用Laravel 5.2从数据库表中删除行

时间:2017-01-18 09:14:43

标签: php laravel laravel-5

最近我开始使用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');
}

4 个答案:

答案 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');

    }