|
|
@@ -56,31 +56,43 @@ class BaseModel extends Model
|
|
|
|
|
|
/**
|
|
|
* 批量更新字段
|
|
|
+ * [1 => ['filed1' => 'value1','filed2'=>'value2'],2=> ['filed1'=>'value1']] key为ID主键
|
|
|
* 获取DB 对象并赋予 模型本身的 connection 连接
|
|
|
* @return mixed
|
|
|
*/
|
|
|
|
|
|
- public static function updateWhenCase($datas)
|
|
|
+ public static function updateWhenCase(array $dataMap)
|
|
|
{
|
|
|
- if(is_array($datas) && count($datas) > 0 ){
|
|
|
- $ids = array_keys($datas);
|
|
|
- if(is_array(reset($datas))){
|
|
|
- $fields = array_keys(reset($datas));
|
|
|
- $sql= " update ". self::getDb() ." set ";
|
|
|
- foreach($fields as $field ){
|
|
|
- $sql.= " `$field` = ( case id";
|
|
|
- foreach($datas as $id => $data ){
|
|
|
- $sql.= " when $id then ".self::stringFilter($data[$field])." ";
|
|
|
+ if(is_array($dataMap) && count($dataMap) > 0 ) {
|
|
|
+ // 构建 SQL 语句
|
|
|
+ $sql = "UPDATE " . self::getDb() . " SET ";
|
|
|
+ $uniqueFieldValues = [];
|
|
|
+ foreach ($dataMap as $id => $data) {
|
|
|
+ foreach ($data as $field => $value) {
|
|
|
+ if (!isset($uniqueFieldValues[$field])) {
|
|
|
+ $uniqueFieldValues[$field] = [];
|
|
|
}
|
|
|
- $sql.= " end ),";
|
|
|
+ $uniqueFieldValues[$field][] = ['id' => $id, 'value' => $value];
|
|
|
}
|
|
|
- $sql = substr($sql,0,-1);
|
|
|
- $sql.= " where id in (".implode(",",$ids).")";
|
|
|
- Db::execute($sql);
|
|
|
}
|
|
|
+ $placeholders = [];
|
|
|
+ foreach ($uniqueFieldValues as $field => $data) {
|
|
|
+ $str = " `$field` = CASE id ";
|
|
|
+ foreach ($data as $value) {
|
|
|
+ $str .= " WHEN {$value['id']} THEN " . self::stringFilter($value['value']);
|
|
|
+ }
|
|
|
+ $str .= " ELSE " . $field . " END";
|
|
|
+ $placeholders[] = $str;
|
|
|
+ }
|
|
|
+ $sql .= implode(', ', $placeholders);
|
|
|
+ $sql .= " where id in (" . implode(",", array_keys($dataMap)) . ")";
|
|
|
+ // 执行 SQL 语句
|
|
|
+ Db::execute($sql);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
public static function stringFilter($string)
|
|
|
{
|
|
|
if(is_null($string)) {
|