getTable(); // 获取第一条数据 $firstRow = current($multipValues); // 需要更新的字段 $updateColumn = array_keys($firstRow); // 更新条件字段, 默认以 id 为更新条件,没有ID以第一个字段为条件 $mapColumn = in_array('id',$updateColumn) ? 'id' : current($updateColumn); // 更新条件字段在更新字段列表中的下标 $i = array_search($mapColumn,$updateColumn); // 删除更新的字段 if( $i !== false ) unset($updateColumn[$i]); // 每个字段的case语句 $caseList = []; // 更新条件字段值 $whereIns = []; // 循环更新字段 foreach ($updateColumn as $column) { // 每个字段一个CASE语句 $caseSql = '`'.$column.'` = CASE '; // 循环传入的批量修改数据 foreach ($multipValues as $data) { // 当更新条件字段对应值时,返回对应的数据 $caseSql .= "WHEN `{$mapColumn}` = '{$data[$mapColumn]}' THEN '{$data[$column]}' "; // 获取更新条件字段的值 $whereIns[] = "'{$data[$mapColumn]}'"; } // 结束CASE语句 $caseSql .= 'ELSE `'.$column.'` END '; // 追加CASE列表 $caseList[] = $caseSql; } // 组装修改语句 $updateSql = 'UPDATE `'.$tableName.'` SET ' . implode(',',$caseList) . ' WHERE `'.$mapColumn.'` IN('.implode(',',$whereIns).');'; // 预处理SQL,绑定参数,返回结果 return DB::update($updateSql); } }