【问题标题】:How to update API resource Laravel?如何更新 API 资源 Laravel?
【发布时间】:2018-08-29 11:52:50
【问题描述】:

我在我的路由上使用了内置的resource 方法,用于特定控制器生成标准CRUD 路由,但我不知道如何更新资源。我正在尝试创建一个 API,所以我使用的是App\Http\Resources,而不仅仅是模型。这是我的控制器中尝试更新的代码,但它不起作用:

public function update(Request $request, Sample $sample)
{
    $sample = Sample::where('id', $request->id)->update($request->all());   
}

我正在使用邮递员检查我的路线,并且我正在尝试将原始更新 JSON 的 put 请求发送到 app.dev/api/samples/1 但在将 get 请求发送到相同的 url 之后,我可以看到值没有改变。 如何使此更新生效?

编辑:这是我的 api.php 路由文件

Route::resource('samples', 'SampleController');

【问题讨论】:

  • 为什么要添加 Sample 对象作为函数参数而不在函数内部使用它?
  • 这是我创建资源控制器时的样子
  • 如果你没有在函数中使用它并且只是删除它,一切看起来都正确,你可以添加你的 api.php 内容吗
  • 还有一件事,你在请求​​中传递了 id 吗?
  • 我试过了,但不能解决问题

标签: laravel request postman crud api-design


【解决方案1】:

在邮递员的标题中尝试这样输入,我使用 x-www-form-urlencoded:

Key                  Value                            Description
Accept          application/json
Content-Type    application/x-www-form-urlencoded

在邮递员的身体中尝试使用 x-www-form-urlencoded:

key         value
name        update
content     new content

【讨论】:

  • 邮递员使用表单数据时遇到了同样的问题。将其更改为 x-www-form-urlencoded 是解决方案。
【解决方案2】:

您需要在模型中将列定义为可填充的,以便以后可以更新它们。您需要做的就是在示例模型中添加以下行。

protected $fillable = [ 'name', 'content'];

如果这仍然不起作用,请随时询问。

【讨论】:

  • @hoolakoola 然后我不知道为什么和什么是错的:D
  • 还是谢谢你!通过从 api.php 中的资源调用中删除 store 和 update 路由,自己设置它们,并将 store 方法用于 store 和 update 路由来解决它。
【解决方案3】:

你可以这样写。希望这能解决您的问题,

public function update(Request $request, Sample $sample)
{
    $sample = $sample->update($request->all());   
}

【讨论】:

  • 第一个例子不行,第二个和下面一样,但也不行。
  • @hoolakoola 我已经更新了我的答案,请看一下
【解决方案4】:

如果这是一个标准的 Laravel 资源路由/控制器并且你的端点是api/samples/1 那么您的 PATCH/PUT 更新方法应如下所示:

public function update(Request $request, $id)
{
    $sample = Sample::find($id);
    $sample->update($request->all());
}

如果你的 body 是 JSON,那么你可能需要:

$sample->update($request->json()->all());

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 2020-03-23
    • 2019-08-23
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多