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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
一个简洁的多级别论坛
Oct 09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
php随机输出名人名言的代码
Oct 07 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
php递归遍历多维数组的方法
Apr 18 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 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防注
2007/01/15 PHP
一篇入门的php Class 文章
2007/04/04 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php for 循环使用的简单实例
2016/06/02 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
python使用range函数计算一组数和的方法
2015/05/07 Python
python 异常处理总结
2016/10/18 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python定义一个Actor任务
2020/07/29 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
党员年终民主评议的自我评价
2013/11/05 职场文书
护士自我评价范文
2014/01/25 职场文书
采购主管岗位职责
2014/02/01 职场文书
六查六看自查材料
2014/02/17 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
机关单位动员会主持词
2014/03/20 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
大学生标准自荐书
2014/06/15 职场文书
室内趣味活动方案
2014/08/24 职场文书
工作检讨书范文
2015/01/23 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
Python Matplotlib绘制动画的代码详解
2022/05/30 Python