Laravel 批量更新多条数据的示例


Posted in PHP onNovember 27, 2017

引言

最近在写任务中,碰到一个问题,需要批量更新多条数据,但是Laravel没有提供这样的方法,Google了一些方法,刚好借着任务来举例说明一下。

任务要求

任务是一个简单的清除未读通知的API,其实就是把通知表中符合user id 和 is read = 0 的行中的 is_read改为1(0代表未读,1代表已读)。

Laravel 批量更新多条数据的示例

方法1

我首先想到的是利用where()方法查出user id和is read符合条件的notices,然后利用foreach循环和save()更新数据表。

$notices = Notice::where('user_id', $userId)
   ->where('is_read', 0)
   ->get();  //得到user_id 和 is_read 符合的notices
 
  foreach($notices as $notice) {
   $notice->is_read = 1;
   $notice->save();
  }      //更新数据表

这个方法确实可行,可是每次遍历都会和数据库进行通讯,当数据量很大的时候,响应速度就会很慢,也非常的浪费资源。

方法2

当我去Google一篇博文启发了我: Laravel一次更新多条记录,批量更新的方法

其实可以利用一条数据库的SQL语句就搞定这个问题

UPDATE notices SET is_read = 1 WHERE user_id = 1 AND is_read =0

一次数据通讯,加快了响应速度又减少资源浪费,那么我可以这样写

$notices = DB::update(DB::raw("UPDATE notices SET is_read = 1 WHERE user_id = 1 AND is_read =0"));

$notices的返回值是更改的数据行数

我们以后的应用中会有很多种类似的任务,像是忽略一些通知、已读一些消息等等,为了代码的复用,我们可以写一个方法,传入表名、user_id和要修改字段名

publish function update_batch_one($table, $user_id, $column) 
{
 $q ="UPDATE".$table.SET.$column."=1WHEREuser_id=".$user_id."AND".$column."=0";
 
 return DB::update(DB::raw($q)
}

总结归纳

这两个方法都只能解决一些特定的问题,但是提供了一种思路,有时候用SQL语句可以很方便、简单的操作数据表,如果我们需要根据不同的条件,批量肯定多条数据的多条信息那么就需要用SQL的WHEN THEN方法了,具体思路就是在我上边贴出来的地址里。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
超级简单的php+mysql留言本源码
Nov 11 PHP
php开发环境配置记录
Jan 14 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
php实现读取超大文件的方法
Jul 28 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
php压缩文件夹最新版
Jul 18 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 #PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 #PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 #PHP
php图片合成方法(多张图片合成一张)
Nov 25 #PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 #PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 #PHP
You might like
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
PHP可变函数学习小结
2015/11/29 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python callable()函数用法实例分析
2018/03/17 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
详解python3中tkinter知识点
2018/06/21 Python
python循环输出三角形图案的例子
2019/11/22 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python如何使用腾讯云发送短信
2020/09/17 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
探亲邀请信范文
2014/01/30 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
2014年导购员工作总结
2014/11/18 职场文书
音乐剧猫观后感
2015/06/04 职场文书
学校财务管理制度
2015/08/04 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis
vue修饰符.capture和.self的区别
2022/04/22 Vue.js