dispatcher = $dispatcher; $this->em = $em; } public function update(OutputInterface $output = null) { $connection = $this->em->getConnection(); $connection->getConfiguration()->setSQLLogger(null); $schema = $connection->getSchemaManager(); $path = preg_replace("~sqlite:///~si", '', $connection->getParams()['path']); $backup = "$path.backup"; copy($path, $backup); try { collect($schema->listTables()) ->reject(f\ref([$this, 'shouldTableBePreserved'])) ->each(f\ref([$schema, 'dropAndCreateTable'])) ; $this->dispatcher->dispatch(new DataUpdateEvent($output), DataUpdateEvent::NAME); unlink($backup); } catch (\Throwable $exception) { $connection->close(); unlink($path); rename($backup, $path); throw $exception; } } private function shouldTableBePreserved(Table $schema) { return in_array($schema->getName(), ['migration_versions', 'messenger_messages']); } }