【问题标题】:Laravel Delete not Working with API RouteLaravel Delete 不使用 API 路由
【发布时间】:2019-04-28 15:22:03
【问题描述】:

我有这个控制器方法:

<?php

public function ignore($id)
{
    Log::info($id);
    $st = Servicetype::destroy($id);
    Log::info($st);
    // $st->delete();

    return response(null, Response::HTTP_OK);
}

另外,Api.php 中的这条路由:

Route::delete('/servicetypelinking/{id}/ignore', 'PlanningCenter\Controllers\ServiceTypeLinkingController@ignore');

我从 Vue.js 方法调用路由,如下所示:

ignore(id) {
  console.log('In the ignore method: ' + id);
  this.mute = true;
  window.axios.delete('/api/servicetypelinking/' + id + '/ignore').then(({ response }) => {
    console.log(response);
    let index = this.serviceTypes.findIndex(serviceType => serviceType.id === id);
    this.serviceTypes.splice(index, 1);

    this.mute = false;
  });
}

Vue 端正在工作,服务类型在屏幕上被“删除”。数据库中什么也没有发生。

当我为 id=16 运行这个时,我在 laravel.log 中得到这个,这表明正确的方法和正确的 id 是正确的:

[2018-11-26 17:27:42] local.INFO: 16  <-- This is passed in
[2018-11-26 17:27:42] local.INFO: 0   <-- Result of the destroy operation

我还可以在这个模型上执行 Servicetype::find(16)->toArray() 并检索数据并将其显示在日志中。

如果我创建一个到这个控制器方法的 web 路由并使用 id 进行获取,则删除发生在数据库中。出于某种原因,即使 id 正在访问方法,在模型上调用 destroy 方法也没有做任何事情。

这里有什么秘密的 Laravel 事情吗?任何帮助表示赞赏。

附加信息: Vue/javascript 方面似乎没有任何问题。控制台中没有错误,请求被正确发送(使用我的原始以及 _delete 参数的建议。)我已经验证它正在访问该方法。我还将 id 硬编码到 destroy() 方法中,它仍然没有删除记录。 laravel 错误日志中也没有错误。一切都应该工作,但事实并非如此。

解决方案:我并没有真正找到问题的解决方案,所以我解决了这个问题。使用

Servicetype::destroy($id);

什么也没做。但是,使用:

DB::table('servicetypes')->where('id', $id)->delete();

确实有效。我希望使用softdeletes,但发现了一些其他问题并使用查询生成器,所以最后我做了一些重新编码以使问题“消失”。有时间我可能会再深入研究一下。这是一种奇怪的行为。

【问题讨论】:

  • 开发者控制台说什么?有什么错误吗?如果是这样,请将其添加到您的问题中。还要检查网络选项卡(如果您使用的是 Chrome)。在那里您可以查看请求或响应是否有问题。
  • 为问题添加了更多信息。除了 destroy() 方法没有破坏任何东西之外,一切看起来都应该正常工作。

标签: laravel api vue.js routes destroy


【解决方案1】:

试试这个:

axios.post('/api/servicetypelinking/' + id +  '/ignore', {_method: 'delete'})

【讨论】:

  • 这没有效果。一切似乎都与使用正确参数调用的 contorller 方法一起工作(就像在原始问题中一样),但记录没有从表中删除。
【解决方案2】:

在控制器中:

Servicetype::find($id)->delete();

如果不起作用,则需要使用$id检查现有记录。

Log:info( Servicetype::find($id) );

如果它是空的——那么记录的 id 有问题。

【讨论】:

    【解决方案3】:

    解决方案:我真的找不到问题的解决方案,所以我解决了这个问题。使用

    Servicetype::destroy($id);
    

    什么也没做。但是,使用:

    DB::table('servicetypes')->where('id', $id)->delete();
    

    确实有效。我希望使用softdeletes,但发现了一些其他问题并使用查询生成器,所以最后我做了一些重新编码以使问题“消失”。有时间我可能会再深入研究一下。这是奇怪的行为。我相应地更新了描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2017-10-22
      • 2019-09-10
      • 2019-12-15
      • 2019-04-24
      • 2019-09-20
      相关资源
      最近更新 更多