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基础知识:函数基础知识
Dec 13 PHP
解析php中获取系统信息的方法
Jun 25 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
php简单实现快速排序的方法
Apr 04 PHP
分享php分页的功能模块
Jun 16 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
PHP+MySql实现一个简单的留言板
Jul 19 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/25 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
python生成验证码图片代码分享
2016/01/28 Python
python抽取指定url页面的title方法
2018/05/11 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
Python如何实现线程间通信
2020/07/30 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
银行实习鉴定
2013/12/13 职场文书
酒店司机岗位职责
2013/12/14 职场文书
物流管理专业职业生涯规划书
2014/01/06 职场文书
仓库管理计划书
2014/05/04 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
公司财务管理制度
2015/08/04 职场文书
认识实习感想
2015/08/10 职场文书
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL