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 CURL模拟GET及POST函数代码
Apr 25 PHP
php 团购折扣计算公式
Nov 24 PHP
PHP常用的缓存技术汇总
May 05 PHP
php魔术变量用法实例详解
Nov 13 PHP
php需登录的文件上传管理系统
Mar 21 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php制作文本式留言板
2015/03/18 PHP
thinkphp分页集成实例
2017/07/24 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
javascript json2 使用方法
2010/03/16 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python找出9个连续的空闲端口
2016/02/01 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
详解python3中的真值测试
2018/08/13 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
人力资源主管职责范本
2014/03/05 职场文书
广播节目策划方案
2014/05/23 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
话题作文之呼唤
2019/12/18 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
Java SSM配置文件案例详解
2021/08/30 Java/Android