BigIntType::class, DateTimeTzToStringType::NAME => DateTimeTzToStringType::class, JsonType::NAME => JsonType::class, JsonOrSerializedType::NAME => JsonOrSerializedType::class, SerializedArrayType::NAME => SerializedArrayType::class, ]; public function createConnection() { $platformClass = self::PLATFORM_CLASS; $connectionParams = [ 'driverClass' => self::DRIVER_CLASS, 'platform' => new $platformClass, ]; $this->setupTypes(); return DriverManager::getConnection($connectionParams, $this->getConfiguration()); } private function setupTypes() { foreach ($this->types as $name => $class) { if (Type::hasType($name)) { Type::overrideType($name, $class); } else { Type::addType($name, $class); } } } private function getConfiguration(): Configuration { $config = new Configuration(); $driverMiddleware = new class implements Middleware { public function wrap(Driver $driver): Driver { return new PostConnectMiddleware($driver); } }; $config->setMiddlewares([$driverMiddleware]); return $config; } }