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你的验证码安全码?
Jan 02 PHP
解决MySQL中文输出变成问号的问题
Jun 05 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
thinkphp缓存技术详解
Dec 09 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
PHP入门教程之上传文件实例详解
Sep 11 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
php删除二维数组中的重复值方法
Mar 12 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下拉选项的批量操作的实现代码
2013/10/14 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
ext实现完整的登录代码
2008/08/08 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python实现redis三种cas事务操作
2017/12/19 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
pycharm安装及如何导入numpy
2020/04/03 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
考试作弊被抓检讨书
2014/01/10 职场文书
进步之星获奖感言
2014/02/22 职场文书
出国留学经济担保书
2014/04/01 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
安全生产月宣传标语
2014/10/06 职场文书
期中考试复习计划
2015/01/19 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
销售会议开幕词
2016/03/04 职场文书