我正在学习如何使用口才/流利 and I found the answer here
从单个查询中插入多行有人可以分享有关如何在单个查询中更新批量行的任何文档吗?
我的查询如下。
Update tblrole set role = 'Super Admin' where RoleID = 1;
Update tblrole set role = 'Super Admin A' where RoleID = 2;
Update tblrole set role = 'Super Admin B' where RoleID = 3;
Update tblrole set role = 'Super Admin C' where RoleID = 4;
答案 0 :(得分:0)
你不能以简单的方式做这样的事情。您可以使用相同的值轻松更新多个行,但如果您想使用不同的值更新role
列,则会很棘手。
事实上,这样做并没有多大意义,但是如果你真的想要它并且你认为它是最好的解决方案,你可以尝试使用这里描述的技术来玩原始查询https://stackoverflow.com/a/25674827/3593996
答案 1 :(得分:0)
您可以使用单个MySQL查询解决问题。它可以使用DB :: raw()方法在Laravel Eloquent中实现。
**UPDATE** tblrole **SET** role =
**CASE**
WHEN RoleID = 1 THEN 'Super Admin'
WHEN RoleID = 2 THEN 'Super Admin A'
WHEN RoleID = 3 THEN 'Super Admin B'
WHEN RoleID = 4 THEN 'Super Admin C'
**END**
**WHERE** RoleID in (1,2,3,4);
答案 2 :(得分:0)
您可以从此批量插入或更新要点中找到灵感:
/**
* 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 );
}
参考:https://gist.github.com/RuGa/5354e44883c7651fd15c
我认为我不需要提供任何解释,因为函数中的每一段代码都说明了这一点。