diff --git a/src/think/Model.php b/src/think/Model.php index bdbfc31..1de3a63 100644 --- a/src/think/Model.php +++ b/src/think/Model.php @@ -318,15 +318,16 @@ protected function _checkTableInfo() /** * 获取字段信息并缓存 * @param string $tableName + * @param bool $must 是否必须刷新 * @return mixed */ - public function flush($tableName = '') + public function flush($tableName = '', $must = false) { if (empty($tableName)) { $tableName = $this->getTableName(); } - if (C('DB_FIELDS_CACHE')) { + if ($must === false && C('DB_FIELDS_CACHE')) { $fieldsCache = S('fields_' . strtolower($tableName)); if (!empty($fieldsCache)) { return $fieldsCache; diff --git a/src/think/module/Module.php b/src/think/module/Module.php index c316170..e83b25e 100644 --- a/src/think/module/Module.php +++ b/src/think/module/Module.php @@ -32,6 +32,21 @@ class Module // 包含租户id的模块列表数据 public static $includeTenantIdModules = []; + // 刷新缓存锁 + protected static $refreshLock = false; + + /** + * 初始化数据 + * @return void + * @throws \Exception + */ + private static function generateModuleData() + { + self::getModuleData(); + self::generateModuleFieldCache(self::$moduleDictData['module_index_by_id']); + self::generateCustomHorizontalFieldsCache(); + } + /** * 模块初始化 * @throws \Exception @@ -39,9 +54,7 @@ class Module public static function init() { if (empty(self::$moduleDictData)) { - self::getModuleData(); - self::generateModuleFieldCache(self::$moduleDictData['module_index_by_id']); - self::generateCustomHorizontalFieldsCache(); + self::generateModuleData(); } } @@ -174,7 +187,7 @@ public static function checkSchema() // 清除数据表字段缓存 Cache::init(config('redis')); - foreach ($tables as $tableName){ + foreach ($tables as $tableName) { S('fields_' . strtolower($tableName), null); } Cache::destroy(config('redis')); @@ -231,4 +244,23 @@ public static function setTenantIdModules($moduleCOde = '') self::$includeTenantIdModules[] = $moduleCOde; } } + + /** + * 刷新模块配置 + * @return bool + * @throws \Exception + */ + public static function refreshModuleConfig() + { + if (self::$refreshLock) { + return false; + } + self::$refreshLock = true; + try { + self::generateModuleData(); + } finally { + self::$refreshLock = false; + } + return true; + } }