溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用Laravel 怎么實(shí)現(xiàn)批量更新多條數(shù)據(jù)

發(fā)布時(shí)間:2021-04-09 17:26:28 來(lái)源:億速云 閱讀:2767 作者:Leah 欄目:開發(fā)技術(shù)

使用Laravel 怎么實(shí)現(xiàn)批量更新多條數(shù)據(jù)?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

方法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è)問題

UPDATE notices SET is_read = 1 WHERE user_id = 1 AND is_read =0

一次數(shù)據(jù)通訊,加快了響應(yīng)速度又減少資源浪費(fèi),那么我可以這樣寫

復(fù)制代碼 代碼如下:


$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ì)有很多種類似的任務(wù),像是忽略一些通知、已讀一些消息等等,為了代碼的復(fù)用,我們可以寫一個(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)
}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI