讲师中心 微信公众号
AI工具推荐 视频效率加速

Laravel如何批量更新数据_Laravel批量更新数据方法【详解】

浅辰小哥_5529

浅辰小哥_5529

发布时间:2026-05-07 16:46:59

|

841人浏览过

|

来源于php中文网

原创

Laravel批量更新需按场景选择方案:统一值用whereIn+update;不同值优先upsert(需唯一索引);数值增减用increment/decrement;复杂场景用原生SQL。

laravel如何批量更新数据_laravel批量更新数据方法【详解】

Laravel 没有内置的「按每条记录不同值」批量更新方法,直接循环 save() 或 update() 会生成 N 条 SQL,性能崩盘;真正高效的方案取决于你的数据结构和场景——不是选“哪个方法最酷”,而是看“哪条路不踩坑”。

统一字段值更新:用 whereIn() + update() 最稳

这是最常见、最安全、也最容易被忽略适用边界的场景:所有目标记录要更新成**相同的值**。

  • 比如把订单状态批量设为 2、把一批用户的 is_active 全改为 1
  • 底层走的是单条 UPDATE ... WHERE id IN (?, ?, ?),数据库原生支持,无兼容性问题
  • 注意 whereIn() 参数必须是纯数值数组,不能是字符串(如 "1,2,3"),否则报错 Incorrect integer value
  • 若 ID 数量超千条,MySQL 默认 max_allowed_packet 可能触发 PDOException: SQLSTATE[HY000]: General error: 1390,需分批或改用原生 SQL

示例:

$orderIds = [1, 5, 8, 12];<br>DB::table('orders')->whereIn('id', $orderIds)->update(['status' => 2]);

每条记录不同值更新:优先用 upsert()(Laravel 9+)

当你有一组带主键/唯一键的数据,想「存在就更新,不存在就插入」,且每条更新字段值不同(如批量修正商品价格、库存),upsert() 是目前最接近“优雅”的原生方案。

  • 必须有唯一索引支撑(如 id、sku、email),否则无法判断“哪条算冲突”
  • 第二个参数是匹配字段数组(['id']),第三个是允许更新字段(['price', 'stock']),别把 id 再塞进第三个参数里
  • SQLite 用户注意:仅支持 3.24+,旧版直接抛 BadMethodCallException
  • 不触发模型事件(updating、updated)、不走访问器/修改器,纯 SQL 层操作

示例:

$data = [<br>    ['id' => 1, 'name' => 'iPhone', 'price' => 6999],<br>    ['id' => 2, 'name' => 'iPad', 'price' => 3299],<br>];<br>Product::upsert($data, ['id'], ['name', 'price']);

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载

数值字段递增/递减:用 increment() 或 decrement()

当你要对多个记录的数值字段做「在原值基础上加减」(如库存入库、点赞数+1、阅读量+1),千万别先查再改——竞态条件和 N+1 查询一起炸。

  • increment('quantity', 5) 底层生成 UPDATE SET quantity = quantity + 5,原子性由数据库保证
  • 它只支持单字段、单值增量;如果要同时更新 quantity 和 updated_at,得用 DB::raw() 拼写:['quantity' => DB::raw('quantity + 5'), 'updated_at' => now()]
  • 大批量(>500 条)仍建议避免循环调用,可结合 DB::table()->whereIn()->update() 配合 DB::raw() 写条件表达式

示例:

foreach ([1 => 5, 2 => 3, 3 => 8] as $id => $add) {<br>    Product::findOrFail($id)->increment('stock', $add);<br>}

复杂逻辑或超大数据量:绕过 Eloquent,手写原生 SQL

当你要更新上万条记录、字段逻辑嵌套(如根据其他表子查询计算新值)、或需要极致性能时,Eloquent 的开销(模型实例化、事件、类型转换)就成了瓶颈。

  • 直接用 DB::statement() 或 DB::update() 执行拼好的 SQL,绑定参数防注入
  • 参考 CASE WHEN 模式:用 CASE WHEN id = ? THEN ? ... END 实现每行不同值更新(如知识库中 updateBatch() 方法)
  • 务必校验输入字段是否存在于表结构中,否则易触发 SQLSTATE[42S22]: Column not found
  • 事务中慎用:长事务 + 大量 WHERE IN 可能锁表,尤其在高并发写场景

关键点不是“能不能写”,而是“要不要承担维护成本”——这种 SQL 一旦业务变更,比 Eloquent 更难调试和复用。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

857

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

855

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2508

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4441

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

6450

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

4256

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

7969

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

1496

2026.03.04

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 213人学习

Composer手册
Composer手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn