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

Laravel:无需逐个设置属性即可更新数据库记录

批量更新Laravel Eloquent模型的简洁方法

当然可以!当你的请求字段和模型属性完全匹配时,根本不用逐个手动赋值,Laravel提供了非常便捷的批量更新方式,下面给你介绍几种常用方案:

方法1:使用fill() + save()

fill()方法可以直接接收一个关联数组,将对应的属性赋值给模型,之后调用save()持久化到数据库:

$book = Book::find($request->id);
$book->fill($request->all());
$book->save();

方法2:直接调用update()

这是更简洁的写法,一步完成查找和更新:

// 如果确定ID一定存在
Book::find($request->id)->update($request->all());

// 更安全的写法:如果ID不存在会抛出404异常
Book::findOrFail($request->id)->update($request->all());

重要注意事项:批量赋值保护

Laravel默认会防止批量赋值漏洞,所以你需要在Book模型中明确允许哪些字段可以被批量赋值:

class Book extends Model
{
    // 列出所有允许批量赋值的字段
    protected $fillable = ['title', 'author', 'publisher', 'something'];

    // 或者使用$guarded来指定禁止赋值的字段(空数组表示允许所有字段)
    // protected $guarded = [];
}

安全优化建议

如果请求中包含一些你不想让用户修改的字段(比如id、created_at这类系统字段),不要直接用$request->all(),而是用only()方法精确指定允许更新的字段:

// 用fill的方式
$book->fill($request->only(['title', 'author', 'publisher', 'something']))->save();

// 用update的方式
Book::findOrFail($request->id)->update($request->only(['title', 'author', 'publisher', 'something']));

这种方式能有效避免恶意提交未授权字段的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:10