Laravel API更新/编辑功能

问题描述 投票:-1回答:2
public function edit(Request $request, $id)
{
    $bridge = Bridge::where('bridge_id',$id);
    $bridge->bridge_id = $request->bridge_id;
    $bridge->bridge_name = $request->bridge_name;
    $bridge->bridge_description = $request->bridge_description;
    $bridge->bridge_region = $request->bridge_region;
    $bridge->latitude = $request->latitude;
    $bridge->longitude = $request->longitude;
    $bridge->save();
}

我很困惑因为如果这个$id。我没有increments('id')列,因为我在表中将其更改为string('bridge_id')。我不能让更新/编辑工作。

这是错误消息:

BadMethodCallException:在第50行的文件C:\ xampp \ htdocs \ PhilSIMS \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Traits \ ForwardsCalls.php中调用未定义的方法Illuminate \ Database \ Eloquent \ Builder :: save()

php laravel function api edit
2个回答
2
投票

第一个错误非常明确:

BadMethodCallException:调用未定义的方法Illuminate \ Database \ Eloquent \ Builder :: save()

这是因为您在查询生成器中调用->save()方法而不是实际的Model(Bridge)实例。要解决此问题,请首先使用->first()方法检索要更新的元素。

$bridge = Bridge::where('bridge_id',$id)->first();
// Instead of: $bridge = Bridge::where('bridge_id',$id);

或者甚至更好,因为你需要找到一个元素..为什么不使用那个方法?

$bridge = Bridge::find($id);

查看有关此主题的文档:Retrieving Single Models / Aggregates


然后,下一个错误:

未找到列:1054未知列id

似乎是因为Laravel不知道你的原始关键是bridge_id而不是id。默认情况下,如果未指定自定义原始键,Laravel将查找名为id的原始键。

要解决此问题,请转到Bridge模型并添加:

// Bridge.php
protected $primaryKey = 'bridge_id';

有关Model Conventions的更多信息,请参阅documentation


0
投票

在您的查询中添加first$bridge = Bridge::where('bridge_id',$id)->first();

© www.soinside.com 2019 - 2024. All rights reserved.