国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - laravel實現批量更新多條記錄的方法示例

laravel實現批量更新多條記錄的方法示例

2021-07-10 16:27PHP教程網 PHP教程

最近在使用Laravel,想批量插入近千條數據,通過網上找到了相關的解決方法,所以下面這篇文章主要給大家介紹了關于laravel實現批量更新多條記錄的相關資料,文中給出了詳細的示例代碼,需要的朋友們下面隨著小編來一起學習學

前言

相信熟悉laravel的童鞋都知道,laravel有批量一次性插入多條記錄,卻沒有一次性按條件更新多條記錄。

是否羨慕thinkphp的saveAll,是否羨慕ci的update_batch,但如此優雅的laravel怎么就沒有類似的批量更新的方法呢?

高手在民間

Google了一下,發現stackoverflow( https://stackoverflow.com/questions/26133977/laravel-bulk-update )上已經有人寫好了,但是并不能防止sql注入。

本篇文章,結合laravel的Eloquent做了調整,可有效防止sql注入。

示例代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
namespace App\Models;
 
use DB;
use Illuminate\Database\Eloquent\Model;
 
/**
 * 學生表模型
 */
class Students extends Model
{
 protected $table = 'students';
 
 //批量更新
 public function updateBatch($multipleData = [])
 {
  try {
   if (empty($multipleData)) {
    throw new \Exception("數據不能為空");
   }
   $tableName = DB::getTablePrefix() . $this->getTable(); // 表名
   $firstRow = current($multipleData);
 
   $updateColumn = array_keys($firstRow);
   // 默認以id為條件更新,如果沒有ID則以第一個字段為條件
   $referenceColumn = isset($firstRow['id']) ? 'id' : current($updateColumn);
   unset($updateColumn[0]);
   // 拼接sql語句
   $updateSql = "UPDATE " . $tableName . " SET ";
   $sets  = [];
   $bindings = [];
   foreach ($updateColumn as $uColumn) {
    $setSql = "`" . $uColumn . "` = CASE ";
    foreach ($multipleData as $data) {
     $setSql .= "WHEN `" . $referenceColumn . "` = ? THEN ? ";
     $bindings[] = $data[$referenceColumn];
     $bindings[] = $data[$uColumn];
    }
    $setSql .= "ELSE `" . $uColumn . "` END ";
    $sets[] = $setSql;
   }
   $updateSql .= implode(', ', $sets);
   $whereIn = collect($multipleData)->pluck($referenceColumn)->values()->all();
   $bindings = array_merge($bindings, $whereIn);
   $whereIn = rtrim(str_repeat('?,', count($whereIn)), ',');
   $updateSql = rtrim($updateSql, ", ") . " WHERE `" . $referenceColumn . "` IN (" . $whereIn . ")";
   // 傳入預處理sql語句和對應綁定數據
   return DB::update($updateSql, $bindings);
  } catch (\Exception $e) {
   return false;
  }
 }
}

可以根據自己的需求再做調整,下面是用法實例:

?
1
2
3
4
5
6
7
8
// 要批量更新的數組
$students = [
 ['id' => 1, 'name' => '張三', 'email' => 'zhansan@qq.com'],
 ['id' => 2, 'name' => '李四', 'email' => 'lisi@qq.com'],
];
 
// 批量更新
app(Students::class)->updateBatch($students);

生成的SQL語句如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
UPDATE pre_students
SET NAME = CASE
WHEN id = 1 THEN
 '張三'
WHEN id = 2 THEN
 '李四'
ELSE
 NAME
END,
 email = CASE
WHEN id = 1 THEN
 'zhansan@qq.com'
WHEN id = 2 THEN
 'lisi@qq.com'
ELSE
 email
END
WHERE
 id IN (1, 2)

是不是效率又提高了一大截呢~

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.tech1024.cn/original/2950.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 黄色一级毛片免费看 | 爱色av网| 久久久青草婷婷精品综合日韩 | 毛片一区 | 国内精品视频在线观看 | 黄色美女网站免费 | 在线观看色 | 国产精品久久久久久 | 国产成人精品一区二区三区四区 | 欧美区日韩区 | 91精品国产综合久久婷婷香蕉 | 日韩aaa视频 | 玖玖玖影院 | 污污的免费网站 | 极品美女销魂一区二区三区 | 欧洲精品在线观看 | 免费的黄色网 | 亚洲乱码日产精品一二三 | 国产精品久久久久久亚洲调教 | 欧美国产精品一区二区三区 | 欧美黄色网视频 | 亚洲 欧美 日韩在线 | 青青草99| 黄色成人在线观看视频 | 成人1区 | 日韩中文一区二区三区 | 欧美一区二区三区精品 | 一区二区乱码 | 亚洲人免费 | 久久久国产精品免费观看 | 精品美女在线观看视频在线观看 | 青青草99 | 欧美精品一区视频 | 欧美视频日韩视频 | 国产欧美日韩在线 | 天堂在线免费视频 | 欧美 日韩 国产 在线 | 久久久国产一级 | 永久av| 日本久久久久久 | 亚洲第一视频 |