You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lumen PUT请求无法正确更新MySQL数据,字段被置空

解决Lumen PUT请求无法获取JSON参数导致更新为空的问题

嘿,我一眼就看出问题所在了——你的Lumen应用根本没正确解析Postman发送的JSON请求体,所以$request->all()才返回空数组,最终更新时把数据库字段都置成空值了。下面是具体的排查和解决步骤,一步步来:

1. 启用Lumen的JSON解析中间件

Lumen 5.5默认不会自动启用处理JSON请求的核心中间件,你得手动打开bootstrap/app.php文件,把下面这行中间件的注释去掉:

$app->middleware([
    // 取消这行的注释,确保它能生效
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
]);

这个中间件负责把JSON请求体转换成框架能识别的参数集合,没有它的话,哪怕你Content-Type头设置对了,Lumen也读不到请求里的参数。

2. 检查Postman里的JSON格式是否合规

JSON格式的语法错误也会导致解析失败,你可以对照这几点自查:

  • 所有键名必须用双引号(比如"elderly_id": 1是正确的,'elderly_id':1就会报错)
  • 最后一个键值对后面别加多余的逗号
  • 如果字段是整数类型,数值不要加引号(比如"centre_id": 123,不是"centre_id": "123")

3. 改用$request->json()直接获取JSON参数(备选方案)

要是启用中间件后还是没解决,你可以绕过input()方法,直接从JSON请求体里读取参数,修改控制器代码如下:

public function updateSensorPackage(Request $request, $id){ 
    $sensorPackage = AddSensorPackage:: find($id); 
    // 用json()方法直接读取JSON请求体中的字段
    $sensorPackage->elderly_id = $request->json('elderly_id'); 
    $sensorPackage->centre_id = $request->json('centre_id'); 
    $sensorPackage->package_id = $request->json('package_id'); 
    $sensorPackage->beacon_id = $request->json('beacon_id'); 
    $sensorPackage->created_by = $request->json('created_by'); 
    $sensorPackage->save(); 
    return response('Updated Successfully', 200); 
}

4. 确认路由配置无误

别忽略基础检查——你的PUT路由是不是正确指向了这个控制器方法?比如在routes/web.php里应该是这样的:

$router->put('/sensor-packages/{id}', 'YourControllerName@updateSensorPackage');

确保HTTP方法是PUT,和你Postman发送的请求方法完全一致。

5. 额外优化:给模型添加$fillable属性

虽然这不是当前问题的直接原因,但为了后续代码更简洁,建议你在AddSensorPackage模型里设置可批量赋值的字段:

class AddSensorPackage extends Model
{
    protected $fillable = ['elderly_id', 'centre_id', 'package_id', 'beacon_id', 'created_by'];
}

等你能正确获取参数后,就可以用$sensorPackage->update($request->all());来批量更新,不用一个个字段手动赋值了。


内容的提问来源于stack exchange,提问作者0xMinCha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:33:18