class Model
{
function batchUpdate(array $update, $whenField = 'id', $whereField = 'id')
{
$when = [];
$ids = [];
foreach ($update as $sets) {
# 跳过没有更新主键的数据
if (!isset($sets[$whenField])) continue;
$whenValue = $sets[$whenField];
foreach ($sets as $fieldName => $value) {
#主键不需要被更新
if ($fieldName == $whenField) {
array_push($ids, $value);
continue;
};
$when[$fieldName][] = "when '{$whenValue}' then '{$value}'";
}
}
# 没有更新的条件id
if (!$when) return false;
$query = $this->whereIn($whereField, $ids);
# 组织sql
foreach ($when as $fieldName => &$item) {
$item = \DB::raw("case $whenField " . implode(' ', $item) . ' end ');
}
return $query->update($when);
}
}
使用:
$model = new Model();
$arr = [['id' => 1,'name'=>'shinchen'], ['id' => 2,'name'=>'张三']];
$model->batchUpdate($arr);