【问题标题】:Laravel Route resource does not delete table data?Laravel Route 资源不删除表数据?
【发布时间】:2019-01-04 19:14:12
【问题描述】:

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

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

而Controller删除功能是,

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

            ->delete();

        return redirect()->back();
    }

而且路线是这样的,

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

但是当点击删除按钮时,它会生成以下错误消息, (1/1) NotFoundHttpException

如何解决这个问题?

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

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

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

    DELETE 方法要求请求具有 DELETE 标头(如 POST、GET 或 PUT)。

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

    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)
    

    【讨论】:

    • 我认为表单是更优雅的方式。
    • 使用您的表单方式但在此处收到此错误消息Route [student.delete] not defined
    • 我8分钟前更新了我的答案,不是delete而是destroy你需要使用。
    【解决方案2】:

    如果你正在使用资源控制器,你可以试试这个。您也可以尝试使用 AJAX 调用删除。

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

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

    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);
            }
            });
    });
    

    我希望这个解决方案也能像上面已经提供的那样工作。

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 1970-01-01
      • 2019-07-10
      • 2015-03-18
      • 2020-12-23
      • 2019-12-13
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多