Laravel 10中如何批量复制请求属性到Eloquent实体?
Laravel 10 Eloquent批量赋值解决方案
你完全不需要创建新对象或者用反射这类复杂方式,Laravel本身就提供了简洁的批量赋值方法,核心依赖模型的$fillable配置(你已经定义了大量属性),直接用下面几种方式就能实现需求:
使用
fill()+save()分步操作
Eloquent模型自带的fill()方法可以接收数组,自动将数组中的键值对赋值到模型属性上,且只会处理$fillable中定义的字段,避免批量赋值异常。示例代码:function save(Request $request){ // 找到数据库中的用户实例,找不到直接抛出404异常 $userFromDB = Usuarios::findOrFail($request->id); // 批量填充请求中的属性(仅$fillable内的字段会被赋值) $userFromDB->fill($request->all()); // 保存变更到数据库 $userFromDB->save(); }用
update()一步完成赋值+保存update()方法是fill()与save()的组合封装,代码更精简:function save(Request $request){ $userFromDB = Usuarios::findOrFail($request->id); // 直接批量更新属性并保存到数据库 $userFromDB->update($request->all()); }安全过滤请求数据
为了避免请求中携带的无关字段(如_token)或恶意字段影响,可以用only()或except()精准过滤数据,甚至直接复用模型的getFillable()方法只取允许填充的字段:// 只保留$fillable中定义的字段,安全性更高 $userFromDB->update($request->only($userFromDB->getFillable())); // 或者排除不需要的字段 $userFromDB->update($request->except(['_token', 'password_confirmation']));
内容的提问来源于stack exchange,提问作者oware
相关产品推荐
相关产品推荐

