Laravel 批量更新多条数据的示例

引言

最近在写任务中,碰到一个问题,需要批量更新多条数据,但是Laravel没有提供这样的方法,Google了一些方法,刚好借着任务来举例说明一下。

任务要求

任务是一个简单的清除未读通知的API,其实就是把通知表中符合user id 和 is read = 0 的行中的 is_read改为1(0代表未读,1代表已读)。

方法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方法了,具体思路就是在我上边贴出来的地址里。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-11-09 00:04:11

Laravel 批量更新多条数据的示例的相关文章

sql实现插入数据主键重复或数据已经存在,则更新这条数据

在做数据库开发的时候,经常会遇到这样的一种情景: 当一条数据不存在的时候,插入这条数据,如果这条数据的主键已经在数据库中存在,那么更新这条数据. 你们一般怎么做呢?先根据主键查询数据,然后判断是否存在数据,如果存在数据,则update字段,否则insert数据. 这样做的弊端就是需要两次连接数据库服务器,然后利用高级语言来判断是否存在的逻辑. 下面教你一条SQL语句,教你解决这类问题! 例如数据表weixin_user的表结构如下所示:(博客转移,图片丢失) $sql = "insert int

mysql 批量更新与批量更新多条记录的不同值实现方法_Mysql

批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码 代码如下:  UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');  这里注意

mysql 批量更新与批量更新多条记录的不同值

批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写:  代码如下 复制代码 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可:  代码如下 复制代码  UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values'); 这里注意 '

mysql批量更新多条记录的同一个字段为不同值的方法_Mysql

首先mysql更新数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 也可以这样用in指定要更新的记录: UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values'); 这里注意 'other_values' 是一个逗号(,)分隔的字符串,如:1,2,3 如果更新多条数据而且每条记录要更新

使用C# 在sqlite数据库中更新一条数据,当前应用程序中是有效的,当我关闭应用程序后,再次打开应用程序,查询,发现更改失败,请各位大神们看看什么原因,谢谢。

问题描述 使用C#在sqlite数据库中更新一条数据,当前应用程序中是有效的,当我关闭应用程序后,再次打开应用程序,查询,发现更改失败,请各位大神们看看什么原因,谢谢代码:sql="UPDATESchoolSETdelegate='北航'WHEREID=2";cmd.CommandText=sql;cmd.ExecuteNonQuery();表结构: 解决方案 本帖最后由 yyyy1999 于 2015-06-09 16:50:07 编辑解决方案二:你的cmd支持sqlite数据库吗?

laravel实现批量更新多条记录的方法示例

前言 相信熟悉laravel的童鞋都知道,laravel有批量一次性插入多条记录,却没有一次性按条件更新多条记录. 是否羡慕thinkphp的saveAll,是否羡慕ci的update_batch,但如此优雅的laravel怎么就没有类似的批量更新的方法呢? 高手在民间 Google了一下,发现stackoverflow( https://stackoverflow.com/questions/26133977/laravel-bulk-update )上已经有人写好了,但是并不能防止sql注入

本人菜鸟求大牛帮忙修改sql下可以更快更新50w条数据,用的oracle

问题描述 declare cursor csr_dept is select company_name,BUSINESS_REG_NUM,ORG_CODE,CORE_ID from t_core_company where core_id is null for update of CORE_ID; row_dept csr_dept%rowtype; t varchar2(35);begin --for循环 for row_dept in csr_dept loop --取同义词 select

hibernate 更新多条数据如何处理

问题描述 我现在用Hibernate碰到了一个问题.现在在做一个订购服务的程序,有1个会员卡,会员卡可能是企业用户,所以该会员卡对应了多个用户,我在订购服务的时候需要为这个企业用户的会员订购统一的服务,那么就需要为该会员卡上的每个用户添加一条订购服务数据.现在我在service里面的add函数中先查询出该会员卡下的所有用户,然后为每个用户添加相同的服务,调用的是dao的add函数,函数中的代码是getHibernateTemplate().save(o);在service的add函数里面循环调用

MySql中使用INSERT INTO语句更新多条数据的例子_Mysql

我们知道当插入多条数据的时候insert支持多条语句: 复制代码 代码如下: INSERT INTO t_member (id, name, email) VALUES     (1, 'nick', 'nick@126.com'),     (4, 'angel','angel@163.com'),     (7, 'brank','ba198@126.com'); 但是对于更新记录,由于update语法不支持一次更新多条记录,只能一条一条执行: 复制代码 代码如下: UPDATE t_mem