yii自带的只有updateAll方法,多条数据某个字段只能修改成统一的。
自写方法:
/**
* 批量修改
* @param $table string 表名
* @param $key string 条件主键,作用参考switch中的case
* @param $val self 修改主键
* @param $data array $key与$val主键对应的数据载体
* @return int 修改成功的条数
*/
public static function batchUpdate($table, $key, $val, $data)
{
$ids = implode(",", array_column($data, $key));
$condition = " ";
foreach ($data as $v) {
$condition .= "WHEN {$v[$key]} THEN '{$v[$val]}' ";
}
$sql = "UPDATE {$table} SET {$val} = CASE {$key} {$condition} END WHERE {$key} in ({$ids})";
$res = Yii::$app->db->createCommand($sql)->execute();
return $res;
}
调用方法及参数:
$infos = [['id' => 1, 'bar_code' => 'ads'], ['id' => 2, 'bar_code' => 'def']];
$this->batchUpdate(TimeResource::tableName(), 'id', 'bar_code', $infos);
使用含义:通过拼接成多条修改sql,再进行运行。
UPDATE table_name
SET bar_code=
CASE id
WHEN 1 THEN 'val'
WHEN 2 THEN 'val'
ELSE
END
WHERE id IN (1,2);