如何在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
相关产品推荐
相关产品推荐

