where('name', 'like', '%shopro%')->select(); foreach ($groups as $group) { $rules = array_filter(explode(',', $group['rules'])); $merged = array_unique(array_merge($rules, $ruleIds)); Db::name('auth_group')->where('id', $group['id'])->update(['rules' => implode(',', $merged)]); } } protected static function importSqlFile($file, $output = null, $ignoreError = false) { if (!is_file($file)) { return; } $prefix = config('database.prefix'); $sql = str_replace('__PREFIX__', $prefix, file_get_contents($file)); $statements = array_filter(array_map('trim', explode(';', $sql))); foreach ($statements as $statement) { if ($statement === '') { continue; } try { Db::execute($statement); } catch (\Exception $e) { if (!$ignoreError) { self::log($output, ' [warn] SQL: ' . $e->getMessage()); } } } } protected static function clearMenuCache() { try { Cache::rm('__menu__'); } catch (\Exception $e) { // ignore } } protected static function registerCliCommand($output = null) { $commandClass = 'addons\\shopro_aliyun_express\\command\\InstallFull'; $commandFile = ROOT_PATH . 'application' . DS . 'command.php'; if (!is_file($commandFile)) { self::log($output, ' [warn] application/command.php 不存在,跳过 CLI 注册'); return; } $content = file_get_contents($commandFile); if (strpos($content, $commandClass) !== false) { return; } $entry = " '" . $commandClass . "',\n"; if (preg_match('/\];\s*$/', $content)) { $content = preg_replace('/\];\s*$/', $entry . "];\n", $content); } else { $content = rtrim($content) . "\n" . $entry; } file_put_contents($commandFile, $content, LOCK_EX); self::log($output, '已注册 php think shopro_aliyun_express:install'); } protected static function log($output, $message) { if ($output) { $output->writeln($message); } } }