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的FTP学习(二)[转自奥索]
Oct 09 PHP
在PHP中使用灵巧的体系结构
Oct 09 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
php生成二维码图片方法汇总
Dec 17 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 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中jpgraph类库的使用介绍
2013/08/08 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php jsonp单引号转义
2014/11/23 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
物理教师自荐信范文
2013/12/28 职场文书
禁烟标语大全
2014/06/11 职场文书
家长学校培训材料
2014/08/20 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
给老婆的检讨书
2015/01/27 职场文书
2016春季运动会前导词
2015/11/25 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
创业计划书之养殖业
2019/10/11 职场文书