setName('propel:database:drop') ->setDescription('Drop a given database or the default one.') ->setHelp(<<propel:database:drop command will drop your database. php app/console propel:database:drop The --force parameter has to be used to actually drop the database. The --connection parameter allows you to change the connection to use. The default connection is the active connection (propel.dbal.default_connection). EOT ) ->addOption('connection', null, InputOption::VALUE_OPTIONAL, 'Connection to use. Example: default, bookstore') ->addOption('force', null, InputOption::VALUE_NONE, 'Set this parameter to execute this action.') ; } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$input->getOption('force')) { $output->writeln('You have to use the "--force" option to drop the database.'); return; } if ('prod' === $this->getApplication()->getKernel()->getEnvironment()) { $this->writeSection($output, 'WARNING: you are about to drop a database in production !', 'bg=red;fg=white'); if (false === $this->askConfirmation($output, 'Are you sure ? (y/n) ', false)) { $output->writeln('Aborted, nice decision !'); return -2; } } $connectionName = $input->getOption('connection') ?: $this->getDefaultConnection(); $config = $this->getConnectionData($connectionName); $connection = Propel::getConnection($connectionName); $dbName = $this->parseDbName($config['dsn']); if (null === $dbName) { return $output->writeln('No database name found.'); } else { $query = 'DROP DATABASE '. $dbName .';'; } try { $statement = $connection->prepare($query); $statement->execute(); $output->writeln(sprintf('Database %s has been dropped.', $dbName)); } catch (\Exception $e) { $this->writeSection($output, array( '[Propel] Exception caught', '', $e->getMessage() ), 'fg=white;bg=red'); } } }