// +---------------------------------------------------------------------- namespace think\migration; use InvalidArgumentException; use Phinx\Db\Adapter\AdapterFactory; abstract class Command extends \think\console\Command { public function getAdapter() { if (isset($this->adapter)) { return $this->adapter; } $options = $this->getDbConfig(); $adapter = AdapterFactory::instance()->getAdapter($options['adapter'], $options); if ($adapter->hasOption('table_prefix') || $adapter->hasOption('table_suffix')) { $adapter = AdapterFactory::instance()->getWrapper('prefix', $adapter); } $this->adapter = $adapter; return $adapter; } /** * 获取数据库配置 * @return array */ protected function getDbConfig(): array { $default = $this->app->config->get('database.default'); $config = $this->app->config->get("database.connections.{$default}"); if (0 == $config['deploy']) { $dbConfig = [ 'adapter' => $config['type'], 'host' => $config['hostname'], 'name' => $config['database'], 'user' => $config['username'], 'pass' => $config['password'], 'port' => $config['hostport'], 'charset' => $config['charset'], 'table_prefix' => $config['prefix'], ]; } else { $dbConfig = [ 'adapter' => explode(',', $config['type'])[0], 'host' => explode(',', $config['hostname'])[0], 'name' => explode(',', $config['database'])[0], 'user' => explode(',', $config['username'])[0], 'pass' => explode(',', $config['password'])[0], 'port' => explode(',', $config['hostport'])[0], 'charset' => explode(',', $config['charset'])[0], 'table_prefix' => explode(',', $config['prefix'])[0], ]; } $table = $this->app->config->get('database.migration_table', 'migrations'); $dbConfig['default_migration_table'] = $dbConfig['table_prefix'] . $table; return $dbConfig; } protected function verifyMigrationDirectory(string $path) { if (!is_dir($path)) { throw new InvalidArgumentException(sprintf('Migration directory "%s" does not exist', $path)); } if (!is_writable($path)) { throw new InvalidArgumentException(sprintf('Migration directory "%s" is not writable', $path)); } } }