loadDefaultValues(); $model->load($data, ''); $model->save(); } catch (Exception $e) { return false; } return true; } /** * 保存统计数据 * * @param array $baseData * @param array $data * @param bool $isIncr * * @return bool */ public static function saveUserStatisticsData(array $baseData, array $data, bool $isIncr = true): bool { $baseWhere = [ 'user_id' => $baseData['user_id'] ]; if (static::IS_BY_DATE) { $baseWhere['date'] = $baseData['date']; } $isExist = static::find()->where($baseWhere)->count(); if (!$isExist) { $saveData = [ 'user_id' => $baseData['user_id'], 'mall_id' => $baseData['mall_id'], ]; if (static::IS_BY_DATE) { $saveData['date'] = $baseData['date']; } static::setData($saveData); } // 用户获取field $newModel = new static; // 保存的数据 $updateData = []; // 允许操作的字段 $allowUpdateField = $isIncr ? static::ALLOW_INCR_FIELD : static::ALLOW_DECR_FIELD; // 循环赋值 foreach ($newModel as $field => $_) { !empty($data[$field]) && in_array($field, $allowUpdateField, true) && $updateData[$field] = $data[$field]; } if (empty($updateData)) { return true; } try { static::updateAllCounters($updateData, $baseWhere); } catch (Exception $e) { $desc = sprintf( '保存用户统计数据失败,data: %s', json_encode([ 'class' => static::class, 'agrs' => func_get_args(), 'saveData' => compact('updateData') ]) ); Yii::error(FormatHelper::exception($e, $desc)); return false; } return true; } }