/**
* 批次插入並在遇到重複鍵時更新
* @param array $values
* @return bool
*/
public static function insertOnDuplicate(array $values)
{
if (empty($values)) {
return true;
}
if (!is_array(reset($values))) {
$values = [$values];
}
foreach ($values as $key => $value) {
ksort($value);
$values[$key] = $value;
}
$eloquentQuery = static::query();
$sql = static::compileInsertOnDuplicate($eloquentQuery, $values);
return $eloquentQuery->getConnection()->statement($sql, Arr::flatten($values, 1));
}
/**
* @param Builder $query
* @param array $values
* @return string
*/
protected static function compileInsertOnDuplicate(Builder $query, array $values)
{
$baseQueryBuilder = $query->getQuery();
$table = $baseQueryBuilder->getGrammar()->wrapTable($baseQueryBuilder->from);
if (!is_array(reset($values))) {
$values = [$values];
}
$columns = $baseQueryBuilder->getGrammar()->columnize(array_keys(reset($values)));
$parameters = collect($values)->map(function ($record) use ($baseQueryBuilder) {
return '('.$baseQueryBuilder->getGrammar()->parameterize($record).')';
})->implode(', ');
$duplicates = collect(explode(',', $columns))->map(function ($column) {
return "$column = values($column)";
})->implode(', ');
return "insert into $table ($columns) values $parameters on duplicate key update $duplicates";
}
laravel 批次插入並在遇到重複鍵時更新
相關文章
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- sql server 複製相同表批次插入資料包僅當使用列列表並且 IDENTITY_INSERT 為ON時SQLServerIDE
- mysql避免插入重複資料MySql
- MySQL唯 一鍵約束場景下卻能插入重複行?MySql
- mybatis批次插入MyBatis
- Yii 批次插入
- 主鍵可以重複?
- laravel 在配置nginx代理時遇到的連結問題LaravelNginx
- PostgreSQL 插入時間與更新時間(qbit)SQL
- Oracle 臨時表 OracleDataAdapter 批次更新OracleAPT
- 解決Linq.ToDictionary()時的鍵重複問題
- 自增長主鍵回顯實現,批次資料插入
- 併發請求的重複插入問題
- MySQL防止重複插入相同記錄 insert if not existsMySql
- laravel建立定時任務並在windows下執行LaravelWindows
- Laravel 定時任務,避免重複的方法-----使用檔案鎖Laravel
- mybatis 批次插入資料MyBatis
- BAPI_BATCH_CHANGE在更新後不自動更新批次特徵APIBAT特徵
- 向HashSet插入自定義物件判斷是否重複物件
- 小測試:HashSet可以插入重複的元素嗎?
- MySql避免重複插入記錄的幾種方法MySql
- C# 批次刪除Excel中的重複行C#Excel
- O(1) 時間插入、刪除和獲取隨機元素,允許元素重複隨機
- oracle和mybatis整合,批次插入OracleMyBatis
- SQL INSERT批次插入方式SQL
- 在MySQL資料庫中,這4種方式可以避免重複的插入資料!MySql資料庫
- Laravel 是怎樣防止你的定時任務重複執行的Laravel
- mybatis批次更新MyBatis
- excel怎麼篩選重複的內容 excel找出重複項並提取Excel
- redis開門之批次插入pipeLineRedis
- LeetCode381. O(1) 時間插入、刪除和獲取隨機元素 - 允許重複LeetCode隨機
- Mybatis如何動態生成插入的列及批次插入值MyBatis
- Java書籤 #MyBatis之批量插入並返回自增主鍵idJavaMyBatis
- PostgreSQL官方並行更新時間表SQL並行
- #每日一記#防止按鈕在短時間內重複點選
- Laravel6.18.0 NPM 編譯時遇到的問題LaravelNPM編譯
- 隨機列印0-100的全部數字並且不可重複,時間複雜度為O(n)隨機時間複雜度
- kettle 實時同步資料(插入/更新/刪除資料)