【问题标题】:How to create a function to delete everything of a table? Vue.js - Laravel如何创建一个函数来删除表的所有内容? Vue.js - Laravel
【发布时间】:2019-11-20 16:26:20
【问题描述】:

我希望能够单击一个按钮并从表中删除所有内容,这就是我现在所拥有的。我正在使用laravel/activitylog,这就是我要删除的内容,我使用Spatie\Activitylog\Models\Activity 访问模型,但它不是本地模型。我正在尝试从已从此包创建的表中删除所有内容。

我的 vue.js 上的删除功能,baseUrl: 'logs'

deleteAll(){
    this.$confirm('¿Desea borrar todos los registros del logs?', 'Advertencia', {
        confirmButtonText: 'Si',
        cancelButtonText: 'Cancelar',
        cancelButtonClass: 'el-button--info',
        confirmButtonClass: 'el-button--warning',
        type: 'warning'
    }).then(() => {
        this.$inertia.delete(this.baseUrl + '/delete')
            .then(
                () => {
                    this.$message({
                        type: 'success',
                        message: 'Eliminado correctamente.'
                    });
                    this.tableData = this.tableData.filter((item) => {
                        return item.id !== row.id
                    });
                },
                (res) => {
                    this.$message.error(parseError(res)[0]);
                }
            )
    })
},

路线

Route::delete('logs/delete', 'ActivityLogController@delete');

控制器上的删除

public function delete()
{
    DB::beginTransaction();
    Activity::where('log_name', 'like', '%%')->delete();
    DB::commit();

    return back();
}

发生的情况是我单击它,在主窗口内打开一个带有 404 的小窗口,它显示成功消息,但没有任何内容被删除。

我做错了什么?

【问题讨论】:

  • 如果要删除所有内容,不要使用where() 子句,只需调用Model::delete()
  • @TimLewis 发生了同样的事情,它没有删除并且 404 窗口仍然出现。我在问题中添加了更多信息。
  • 嗯,不能与这个问题的vue.js 部分交谈(根本不知道vue),但请检查浏览器的网络选项卡以查看请求的去向、标头等,并检查 Laravel 的日志 (storage/logs/) 是否有任何错误等。我的评论更多是对方法的观察。
  • 您可能发布到错误的端点。 404 表示未找到。 Laravel 可能无法将您的 url 解析为现有路由。尝试在检查器中使用网络选项卡。
  • @tprj29 这是网络选项卡上的内容 请求 URL:page.com/logs/delete 请求方法:删除状态代码:404 未找到

标签: laravel vue.js


【解决方案1】:

在你的控制器中试试这个:

public function delete()
{
    DB::beginTransaction();
    try {
        Activity::truncate();
        DB::commit();
    } catch(\Exception $ex) {
        Log::error("[ActivityDelete] An error occurred: " . $ex->getMessage());
        DB::rollback();
        return response()->json($ex->getMessage(), $ex->getStatusCode());
    }

    return response()->json(['message' => 'Success'], 200);
}

我相信 404 来自使用 back(),这不是 axios 的有效响应。最重要的是,它无论如何都不会删除,因此您尝试删除的方式也可能存在问题。

如果失败 - 请检查您的存储日志并在此处报告。

【讨论】:

  • 好主意,小心truncate;在某些情况下您想使用它,但它不尊重softDeletes() 之类的东西。我怀疑这是一个问题,但只是需要注意的事情。
  • 我正在使用 Inerita-vue 并且在我的项目中到处使用return back()。我刚刚用退货代替了您的退货,而且效果很好!谢谢。
【解决方案2】:

您可以更改查询。例如:

Activity::where('id', '>', 0)->delete();

【讨论】:

  • 这无关紧要。删除记录的方法不是这里的问题。
猜你喜欢
  • 2021-06-13
  • 2017-10-09
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
相关资源
最近更新 更多