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

Laravel:如何将客户端传入的JSON转换为Eloquent对象?

解决Laravel中JSON转Eloquent对象的问题

嘿,这问题我熟,Laravel里把JSON转成Eloquent对象其实挺简单的,给你分两种常用场景说清楚:

第一步:先确保正确解析JSON字符串

你客户端用JSON.stringify发的是字符串,所以控制器里得先把它转成PHP关联数组(更方便后续操作):

// 假设前端把JSON字符串放在请求参数的`newserials`字段里
$serialData = json_decode($request->input('newserials'), true);

// 如果是通过请求体直接发送JSON(比如axios的post默认发JSON格式),可以直接取:
$serialData = $request->all();

场景1:单个JSON对象转Eloquent实例

假设你的对应模型是App\Models\Serial(记得换成你自己的实际模型类名),直接用模型的填充方法就行:

use App\Models\Serial;

// 方式1:创建新实例并填充(可选择是否保存到数据库)
$serial = new Serial();
$serial->fill($serialData); // 给实例填充属性
$serial->save(); // 需要保存到数据库就调用这个方法

// 方式2:一步创建并保存到数据库
$serial = Serial::create($serialData);

场景2:多个JSON对象转Eloquent集合

如果你的$newserials是多个对象组成的数组,用hydrate或createMany就能快速生成Eloquent集合:

// 方式1:生成Eloquent集合(实例未保存到数据库)
$serials = Serial::hydrate($serialData);

// 方式2:批量创建并保存到数据库(会触发模型的创建事件)
$serials = Serial::createMany($serialData);

关键注意事项

必须设置模型的批量赋值权限,否则会抛出MassAssignmentException异常:

// 在你的Serial模型里添加允许批量赋值的字段:
protected $fillable = ['title', 'code', 'status']; // 替换成你实际需要赋值的字段

// 或者允许所有字段(线上环境谨慎使用,建议明确指定$fillable):
protected $guarded = [];

如果是要更新现有模型

如果JSON里包含主键id,想更新已有数据而不是创建新的,可以用updateOrCreate方法:

$serial = Serial::updateOrCreate(
    ['id' => $serialData['id']], // 查询条件:找到对应id的记录
    $serialData // 要更新或填充的字段
);

这样处理后,你得到的$serial或$serials就是标准的Eloquent实例/集合了,完全可以像操作普通模型一样调用方法(比如$serial->update(['status' => 1]))、访问属性(比如echo $serial->title)。

内容的提问来源于stack exchange,提问作者Aleks Per

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:19:39