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

Laravel中save()与update()方法孰快?是否有专用增量函数?

关于Laravel博客访问量递增的优化方案

1. update()方法确实比你当前的save()更快

你现在的代码逻辑是先从数据库查询出$post对象,修改views值后再调用save()保存,这会触发两次SQL请求:一次SELECT查询获取数据,一次UPDATE更新数据。

如果改用update()结合DB::raw的写法,只需要一次SQL请求就能完成递增:

Post::where('id', $post->id)->update(['views' => DB::raw('views + 1')]);

这种方式跳过了查询对象的步骤,减少了数据库交互次数,在高访问量场景下性能差异会更明显。

2. Laravel有专门的递增函数:increment()

Laravel Eloquent提供了increment()方法,这是专门为数值字段递增设计的工具,用法非常简洁,而且内部会处理成数据库原子操作,能避免并发场景下的计数错误(比如多个请求同时递增时,不会出现少加的情况)。

常用的几种写法:

  • 如果已经获取了$post对象:
$post->increment('views');
  • 直接通过模型ID操作(无需先查询对象,性能最优):
Post::where('id', $postId)->increment('views');
  • 还可以指定递增的步长(比如一次加2):
$post->increment('views', 2);

三种方式对比

方式SQL请求次数并发安全性代码简洁度
你的当前代码2次不安全一般
update()+DB::raw1次安全一般
increment()1次安全高

显然increment()是最优选择,既简洁又高效,还能解决并发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:40:22