/**
* note: 原生sql批量更新封装
* @param $primaryKeyField 主键字段名
* @param $data 更新的数据,二维数组
* @param string $updateFieldValue 更新的字段,一维数组
* @param string $table 表名
* @return mixed
*/
public function batchUpdate($primaryKeyField, $data, $updateFieldValue = '', $table = '')
{
$table = empty($table) ? self::tableName() : $table;
$updateFieldValue = empty($updateFieldValue) ? array_keys($data[0]) : $updateFieldValue;
$ids = implode(",", array_column($data, $primaryKeyField));
$sqlHead = "UPDATE `{$table}` SET ".' ';
$sqlEnd = "WHERE {$primaryKeyField} in ({$ids})";
$sqlMiddle = '';
foreach ($updateFieldValue as $k => $v) {
$condition = '';
foreach ($data as $key) {
$condition .= "WHEN {$key[$primaryKeyField]} THEN '{$key[$v]}' ";
}
$sqlMiddle .= "{$v} = CASE {$primaryKeyField} {$condition} END,";
}
$sql = $sqlHead . rtrim($sqlMiddle, ',') . ' '.$sqlEnd;
$res = \Yii::$app->db_aofei_activity->createCommand($sql)->execute();
}
也可以参考这两篇文章自己封装一个:
https://blog.csdn.net/weixin_42290280/article/details/89384741