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和ACCESS写聊天室(五)
Oct 09 PHP
php知道与问问的采集插件代码
Oct 12 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
PHP的PDO操作简单示例
Mar 30 PHP
PHP7扩展开发教程之Hello World实现方法示例
Aug 03 PHP
PHP实现搜索时记住状态的方法示例
May 11 PHP
php判断目录存在的简单方法
Sep 26 PHP
laravel清除视图缓存的代码
Oct 23 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
PHP使用非对称加密算法RSA
Apr 21 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
Session的工作方式
2006/10/09 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
python mysqldb连接数据库
2009/03/16 Python
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
使用python实现对元素的长截图功能
2019/11/14 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
Django 实现图片上传和下载功能
2020/12/31 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
个人评价范文分享
2014/01/11 职场文书
党章学习思想汇报
2014/01/14 职场文书
英语商务邀请函范文
2014/01/16 职场文书
二手房购房意向书范本
2014/04/01 职场文书
小学生新年寄语
2014/04/03 职场文书
工作分析计划书
2014/04/30 职场文书
活动主持人开场白
2015/05/28 职场文书