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 相关文章推荐
我的论坛源代码(十)
Oct 09 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
php从完整文件路径中分离文件目录和文件名的方法
Mar 13 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
利用php输出不同的心形图案
Apr 22 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
php将字符串转换为数组实例讲解
May 05 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
Cannot modify header information错误解决方法
2008/10/08 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python中交换两个元素的实现方法
2018/06/29 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
python 绘制国旗的示例
2020/09/27 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
年度考核自我鉴定
2013/11/09 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
大学生英语演讲稿
2014/04/24 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
美丽人生观后感
2015/06/03 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
Android Rxjava3 使用场景详解
2022/04/07 Java/Android
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫