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 相关文章推荐
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
功能强大的PHP发邮件类
Aug 29 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
浅谈PHP中的Trait使用方法
Mar 22 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
laravel请求参数校验方法
Oct 10 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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
拼音码表的生成
2006/10/09 PHP
PHP URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
django中的ajax组件教程详解
2018/10/18 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
使用python3+xlrd解析Excel的实例
2018/05/04 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
销售人员求职的自我评价分享
2014/03/15 职场文书
公开服务承诺制度
2014/03/26 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
2015年元旦标语大全
2014/12/09 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书