BigIntType::class, DateTimeTzToStringType::NAME => DateTimeTzToStringType::class, JsonType::NAME => JsonType::class, JsonOrSerializedType::NAME => JsonOrSerializedType::class, SerializedArrayType::NAME => SerializedArrayType::class, ]; public function createConnection() { $this->setupTypes(); return DriverManager::getConnection( [ 'driverClass' => self::DRIVER_CLASS, ], $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; } }