saveDefaultConfig(); $config = DatabaseConfigLoader::load($this->getConfig()); $this->assertExtensions($config->driver); $connections = new ConnectionManager($config); $schema = new SchemaManager($connections, $config); $query = new QueryRunner($connections, $config); $orm = new EntityManager($connections, $config); $orm->cache()->attachPlugin($this, $orm); $migrations = new MigrationManager($schema, $query, $config); $this->api = new DatabaseApi($schema, $query, $orm, $connections, $config, $migrations); DatabaseProvider::set($this->api); } public function onDisable(): void { if ($this->api !== null) { $this->api->close(); } DatabaseProvider::set(null); $this->api = null; } private function assertExtensions(string $driver): void { if (!extension_loaded('pdo')) { throw new \RuntimeException('PDO extension is required'); } if ($driver === 'mysql' && !extension_loaded('pdo_mysql')) { throw new \RuntimeException('pdo_mysql extension is required for MySQL'); } if ($driver === 'postgres' && !extension_loaded('pdo_pgsql')) { throw new \RuntimeException('pdo_pgsql extension is required for PostgreSQL'); } } }