Laravel Route资源不会删除表数据吗?

时间:2019-01-04 08:23:28

标签: php laravel-5

使用Laravel 5.6和Mysql。并需要使用以下数据删除表数据。

<td><a class="button is-outlined" href="/student/{{$student->id}}/delete">Delete</a></td>

和控制器删除功能是

public function delete($id)
    {
         DB::table('students')
            ->where('id', $id)

            ->delete();

        return redirect()->back();
    }

路线是这样的

Route::resource('student','StudentController');

但是当单击删除按钮时,它会根据错误消息生成, (1/1) NotFoundHttpException

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

如果使用资源控制器,则无法为 DELETE 方法生成链接。

顺便说一下,它不是delete方法,而是destroy方法和链接。

DELETE 方法期望请求具有 DELETE 标头(例如POST,GET或PUT)。

最简单的方法是为您的delete方法定义一个URL:

Route::get('student/{site}/delete', ['as' => 'student.delete', 'uses' => 'StudentController@delete']);

或者您必须使用这样的形式来调用 Delete 标头:

<form action="{{ route('student.destroy', $studentId) }}" method="POST">
    @method('DELETE')
    @csrf
    <button>Delete</button>
</form>

您需要更改方法的名称:

public function destroy($id)

答案 1 :(得分:0)

如果您正在使用资源控制器,则可以尝试此操作。您也可以尝试使用AJAX Call进行删除。

<td><a class="button is-outlined" id="delete-record">Delete</a></td>

DELETE动词将自动从您的destroy调用Resource Controller动作。

public function destroy($id)
{
    $deleted = DB::table('students')
                 ->where('id', $id)
                 ->delete();
    // return number of deleted records             
    return $deleted;
}

要执行DELETE,请使用这样的AJAX调用。

$('#delete-record').click(function(){
        $.ajax({
        url: '/student/'+{{$student->id}},
        type: 'DELETE',  // user.destroy
        success: function(result) {
            console.log("Success");
            console.log("No. Of Deleted Records = "+result);
        }
        });
});

我希望该解决方案也能像已经提供的解决方案一样工作。