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

如何在PHP中利用同字段JSON自动填充User对象?

如何自动将JSON数据填充到字段匹配的User对象中?

你的JSON数据:

{
   "id":1,
   "name":"John",
   "firstname":"Doe"
}

当前手动赋值的方式:

$input = $request->json()->all();
$user = new User();
$user->id = $input['id'];
$user->name = $input['name'];
$user->firstname = $input['firstname'];

当然可以实现自动填充,而且在Laravel里有几种更高效的方式,不需要手动逐个字段赋值:

1. 使用fill方法批量赋值

只要你的User模型配置了可填充字段规则,就可以直接用fill方法把数组数据批量填充到模型实例:

$input = $request->json()->all();
$user = new User();
$user->fill($input);
// 需要保存到数据库的话调用save()
$user->save();

2. 直接用create方法创建并保存

create方法是new Model + fill + save的组合操作,会直接根据传入的数组创建模型实例并保存到数据库:

$input = $request->json()->all();
$user = User::create($input);

关键前提:配置模型的可填充字段

上面两种方式生效的核心是,你需要在User模型中声明允许批量赋值的字段,有两种配置方式:

  • 设置$fillable属性(指定允许的字段白名单):
class User extends Model
{
    protected $fillable = ['id', 'name', 'firstname'];
}
  • 或者设置$guarded为空数组(允许所有字段赋值,生产环境慎用):
class User extends Model
{
    protected $guarded = [];
}

自定义fromJSON方法

如果你确实想要类似你示例中的fromJSON方法,也可以在模型中自行实现:

class User extends Model
{
    protected $fillable = ['id', 'name', 'firstname'];

    public function fromJSON(array $data)
    {
        $this->fill($data);
        return $this; // 支持链式调用
    }
}

使用方式完全符合你的预期:

$user = new User();
$user->fromJSON($input);
$user->save();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:30:02