Skip to content

Instantly share code, notes, and snippets.

@anisur3036
Forked from RuGa/massInsertOrUpdate.php
Created May 14, 2020 05:43
Show Gist options
  • Save anisur3036/9cbadcf6f2c463d70d7ae97a83dab4d3 to your computer and use it in GitHub Desktop.
Save anisur3036/9cbadcf6f2c463d70d7ae97a83dab4d3 to your computer and use it in GitHub Desktop.
Mass (bulk) insert or update on duplicate for Laravel 4/5
/**
* Mass (bulk) insert or update on duplicate for Laravel 4/5
*
* insertOrUpdate([
* ['id'=>1,'value'=>10],
* ['id'=>2,'value'=>60]
* ]);
*
*
* @param array $rows
*/
function insertOrUpdate(array $rows){
$table = \DB::getTablePrefix().with(new self)->getTable();
$first = reset($rows);
$columns = implode( ',',
array_map( function( $value ) { return "$value"; } , array_keys($first) )
);
$values = implode( ',', array_map( function( $row ) {
return '('.implode( ',',
array_map( function( $value ) { return '"'.str_replace('"', '""', $value).'"'; } , $row )
).')';
} , $rows )
);
$updates = implode( ',',
array_map( function( $value ) { return "$value = VALUES($value)"; } , array_keys($first) )
);
$sql = "INSERT INTO {$table}({$columns}) VALUES {$values} ON DUPLICATE KEY UPDATE {$updates}";
return \DB::statement( $sql );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment