Laravel 批量更新多條數(shù)據(jù)的示例
引言
最近在寫(xiě)任務(wù)中,碰到一個(gè)問(wèn)題,需要批量更新多條數(shù)據(jù),但是Laravel沒(méi)有提供這樣的方法,Google了一些方法,剛好借著任務(wù)來(lái)舉例說(shuō)明一下。
任務(wù)要求
任務(wù)是一個(gè)簡(jiǎn)單的清除未讀通知的API,其實(shí)就是把通知表中符合user id 和 is read = 0 的行中的 is_read改為1(0代表未讀,1代表已讀)。
方法1
我首先想到的是利用where()方法查出user id和is read符合條件的notices,然后利用foreach循環(huán)和save()更新數(shù)據(jù)表。
$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(); } //更新數(shù)據(jù)表
這個(gè)方法確實(shí)可行,可是每次遍歷都會(huì)和數(shù)據(jù)庫(kù)進(jìn)行通訊,當(dāng)數(shù)據(jù)量很大的時(shí)候,響應(yīng)速度就會(huì)很慢,也非常的浪費(fèi)資源。
方法2
當(dāng)我去Google一篇博文啟發(fā)了我: Laravel一次更新多條記錄,批量更新的方法
其實(shí)可以利用一條數(shù)據(jù)庫(kù)的SQL語(yǔ)句就搞定這個(gè)問(wèn)題
UPDATE notices SET is_read = 1 WHERE user_id = 1 AND is_read =0
一次數(shù)據(jù)通訊,加快了響應(yīng)速度又減少資源浪費(fèi),那么我可以這樣寫(xiě)
$notices = DB::update(DB::raw("UPDATE notices SET is_read = 1 WHERE user_id = 1 AND is_read =0"));
$notices的返回值是更改的數(shù)據(jù)行數(shù)
我們以后的應(yīng)用中會(huì)有很多種類(lèi)似的任務(wù),像是忽略一些通知、已讀一些消息等等,為了代碼的復(fù)用,我們可以寫(xiě)一個(gè)方法,傳入表名、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) }
總結(jié)歸納
這兩個(gè)方法都只能解決一些特定的問(wèn)題,但是提供了一種思路,有時(shí)候用SQL語(yǔ)句可以很方便、簡(jiǎn)單的操作數(shù)據(jù)表,如果我們需要根據(jù)不同的條件,批量肯定多條數(shù)據(jù)的多條信息那么就需要用SQL的WHEN THEN方法了,具體思路就是在我上邊貼出來(lái)的地址里。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
YII2框架中ActiveDataProvider與GridView的配合使用操作示例
這篇文章主要介紹了YII2框架中ActiveDataProvider與GridView的配合使用操作,結(jié)合實(shí)例形式分析了YII2框架中ActiveDataProvider與GridView的功能及配合使用相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-03-03一次因composer錯(cuò)誤使用引發(fā)的問(wèn)題與解決
這篇文章主要給大家介紹了一次因composer錯(cuò)誤使用引發(fā)的問(wèn)題與解決方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03php源碼 fsockopen獲取網(wǎng)頁(yè)內(nèi)容實(shí)例詳解
這篇文章主要介紹了php源碼 fsockopen獲取網(wǎng)頁(yè)內(nèi)容實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09PHP模糊查詢(xún)的實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)?lái)一篇PHP模糊查詢(xún)的實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09用 Composer構(gòu)建自己的 PHP 框架之構(gòu)建路由
本文是構(gòu)建自己的php框架的第二篇,主要為大家來(lái)講述如何構(gòu)建路由,非常的詳細(xì),也很易懂,有需要的朋友可以參考下2014-10-10Laravel路由中不固定數(shù)量的參數(shù)如何實(shí)現(xiàn)?
最近在學(xué)習(xí)laravel的時(shí)候發(fā)現(xiàn)了一個(gè)有趣的地方,下面和大家分享下,這篇文章主要給大家介紹了關(guān)于Laravel路由中不固定數(shù)量的參數(shù)是如何實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-12-12Laravel執(zhí)行migrate命令提示:No such file or directory的解決方法
這篇文章主要介紹了Laravel執(zhí)行migrate命令提示:No such file or directory的解決方法,分析了執(zhí)行migrate命令出現(xiàn)錯(cuò)誤的原因與相關(guān)的解決方法,需要的朋友可以參考下2016-03-03PHP樹(shù)-不需要遞歸的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇PHP樹(shù)-不需要遞歸的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06