/**
* 批次插入並在遇到重複鍵時更新
* @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重複插入問題SQL
- mysql忽略主鍵衝突、避免重複插入的幾種方式MySql
- mysql 忽略主鍵衝突、避免重複插入的幾種方式MySql
- mysql避免插入重複資料MySql
- MySQL 處理插入過程中的主鍵唯一鍵重複值辦法MySql
- MySQL唯 一鍵約束場景下卻能插入重複行?MySql
- sql server 複製相同表批次插入資料包僅當使用列列表並且 IDENTITY_INSERT 為ON時SQLServerIDE
- mybatis批次插入MyBatis
- laravel 在配置nginx代理時遇到的連結問題LaravelNginx
- PostgreSQL 插入時間與更新時間(qbit)SQL
- Oracle 臨時表 OracleDataAdapter 批次更新OracleAPT
- Laravel 定時任務,避免重複的方法-----使用檔案鎖Laravel
- laravel建立定時任務並在windows下執行LaravelWindows
- MyBatis在Oracle中插入資料並返回主鍵的問題解決MyBatisOracle
- 解決Linq.ToDictionary()時的鍵重複問題
- 自增長主鍵回顯實現,批次資料插入
- 併發請求的重複插入問題
- MSSQL Merge [Into](一鍵式更新、插入、刪除)SQL
- C# 批次刪除Excel中的重複行C#Excel
- MySql避免重複插入記錄的幾種方法MySql
- 小測試:HashSet可以插入重複的元素嗎?
- 向HashSet插入自定義物件判斷是否重複物件
- MySQL防止重複插入相同記錄 insert if not existsMySql
- O(1) 時間插入、刪除和獲取隨機元素,允許元素重複隨機
- Laravel 是怎樣防止你的定時任務重複執行的Laravel
- mybatis批次更新MyBatis
- oracle和mybatis整合,批次插入OracleMyBatis
- 在MySQL資料庫中,這4種方式可以避免重複的插入資料!MySql資料庫
- excel怎麼篩選重複的內容 excel找出重複項並提取Excel
- 在ASP.NET中,向資料庫批次插入資料 (轉)ASP.NET資料庫
- MySQL中如何批次插入資料MySql
- SQL INSERT批次插入方式SQL
- Mybatis如何動態生成插入的列及批次插入值MyBatis
- 動態給表新增刪除欄位並同時修改它的插入更新儲存過程儲存過程
- PostgreSQL官方並行更新時間表SQL並行
- Oracle遊標開啟時遇到併發更新Oracle
- linux_script_批次搜尋指定串並取關鍵子Linux