private function getMigrationsConfiguration() { $em = $this->getDoctrine()->getEntityManager(); $dir = $this->container->getParameter('doctrine_migrations.dir_name'); $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($em->getConnection()); $configuration->setMigrationsNamespace($this->container->getParameter('doctrine_migrations.namespace')); $configuration->setMigrationsDirectory($dir); $configuration->registerMigrationsFromDirectory($dir); $configuration->setName($this->container->getParameter('doctrine_migrations.name')); $configuration->setMigrationsTableName($this->container->getParameter('doctrine_migrations.table_name')); return $configuration; }
/** * Return the configuration needed for Migrations. * * @return \Doctrine\DBAL\Migrations\Configuration\Configuration */ protected function getMigrationConfiguration() { $this->output = array(); $that = $this; $outputWriter = new \Doctrine\DBAL\Migrations\OutputWriter(function ($message) use($that) { $that->output[] = $message; }); $connection = $this->entityManager->getConnection(); $schemaManager = $connection->getSchemaManager(); if ($schemaManager->tablesExist(array('flow3_doctrine_migrationstatus')) === true) { $schemaManager->renameTable('flow3_doctrine_migrationstatus', self::DOCTRINE_MIGRATIONSTABLENAME); } $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($connection, $outputWriter); $configuration->setMigrationsNamespace('TYPO3\\Flow\\Persistence\\Doctrine\\Migrations'); $configuration->setMigrationsDirectory(\TYPO3\Flow\Utility\Files::concatenatePaths(array(FLOW_PATH_DATA, 'DoctrineMigrations'))); $configuration->setMigrationsTableName(self::DOCTRINE_MIGRATIONSTABLENAME); $configuration->createMigrationTable(); $databasePlatformName = $this->getDatabasePlatformName(); foreach ($this->packageManager->getActivePackages() as $package) { $path = \TYPO3\Flow\Utility\Files::concatenatePaths(array($package->getPackagePath(), 'Migrations', $databasePlatformName)); if (is_dir($path)) { $configuration->registerMigrationsFromDirectory($path); } } return $configuration; }
/** * Return the configuration needed for Migrations. * * @return \Doctrine\DBAL\Migrations\Configuration\Configuration */ protected function getMigrationConfiguration() { $this->output = array(); $that = $this; $outputWriter = new \Doctrine\DBAL\Migrations\OutputWriter(function ($message) use($that) { $that->output[] = $message; }); $connection = $this->entityManager->getConnection(); if ($connection->getSchemaManager()->tablesExist(array('flow3_doctrine_migrationstatus')) === TRUE) { // works for SQLite, MySQL, PostgreSQL, Oracle // does not work for SQL Server $connection->exec('ALTER TABLE flow3_doctrine_migrationstatus RENAME TO flow_doctrine_migrationstatus'); } $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($connection, $outputWriter); $configuration->setMigrationsNamespace('TYPO3\\Flow\\Persistence\\Doctrine\\Migrations'); $configuration->setMigrationsDirectory(\TYPO3\Flow\Utility\Files::concatenatePaths(array(FLOW_PATH_DATA, 'DoctrineMigrations'))); $configuration->setMigrationsTableName('flow_doctrine_migrationstatus'); $configuration->createMigrationTable(); $databasePlatformName = $this->getDatabasePlatformName(); foreach ($this->packageManager->getActivePackages() as $package) { $path = \TYPO3\Flow\Utility\Files::concatenatePaths(array($package->getPackagePath(), 'Migrations', $databasePlatformName)); if (is_dir($path)) { $configuration->registerMigrationsFromDirectory($path); } } return $configuration; }
/** * Executes DB changes based in the classes defined in * src/Chamilo/CoreBundle/Migrations/Schema/* * * @param string $chamiloVersion * @param EntityManager $manager * @throws \Doctrine\DBAL\DBALException */ function migrate($chamiloVersion, EntityManager $manager) { $debug = true; $connection = $manager->getConnection(); $config = new \Doctrine\DBAL\Migrations\Configuration\Configuration($connection); // Table name that will store migrations log (will be created automatically, // default name is: doctrine_migration_versions) $config->setMigrationsTableName('version'); // Namespace of your migration classes, do not forget escape slashes, do not add last slash $config->setMigrationsNamespace('Application\\Migrations\\Schema\\V' . $chamiloVersion); // Directory where your migrations are located $config->setMigrationsDirectory(api_get_path(SYS_PATH) . 'app/Migrations/Schema/V' . $chamiloVersion); // Load your migrations $config->registerMigrationsFromDirectory($config->getMigrationsDirectory()); $migration = new \Doctrine\DBAL\Migrations\Migration($config); $versions = $config->getMigrations(); /** @var Doctrine\DBAL\Migrations\Version $migrationItem */ foreach ($versions as $version) { $version->getMigration()->setEntityManager($manager); } $to = null; // Retrieve SQL queries that should be run to migrate you schema to $to version, // if $to == null - schema will be migrated to latest version $versions = $migration->getSql($to); if ($debug) { $nl = '<br>'; foreach ($versions as $version => $queries) { echo 'VERSION: ' . $version . $nl; echo '----------------------------------------------' . $nl . $nl; foreach ($queries as $query) { echo $query . $nl; } echo $nl . $nl; } } try { // Execute migration! $migration->migrate($to); if ($debug) { echo 'DONE' . $nl; } } catch (Exception $ex) { if ($debug) { echo 'ERROR: ' . $ex->getMessage() . $nl; } } }
protected function getDoctrineMigrationConfig() { $config = Registry::getConfig(); // Doctrine Migration $entityManager = Registry::getEntityManager(); $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($entityManager->getConnection()); $configuration->setName($config->migration->doctrine->name); $configuration->setMigrationsNamespace($config->migration->doctrine->migrations_namespace); $configuration->setMigrationsTableName($config->migration->doctrine->table_name); $configuration->setMigrationsDirectory($config->migration->doctrine->migrations_directory); $configuration->registerMigrationsFromDirectory($configuration->getMigrationsDirectory()); return $configuration; }
/** * Get Doctrine Migration Command Line Interface * * @return \Symfony\Component\Console\Application */ public function getDoctrineMigrationCli() { if ($this->cli) { return $this->cli; } $em = \Env::get('em'); $conn = $em->getConnection(); $this->cli = new \Symfony\Component\Console\Application('Doctrine Migration Command Line Interface', \Doctrine\Common\Version::VERSION); $this->cli->setCatchExceptions(true); $helperSet = $this->cli->getHelperSet(); $helpers = array('db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($conn), 'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($this->cx->getDb()->getEntityManager())); foreach ($helpers as $name => $helper) { $helperSet->set($helper, $name); } //custom configuration $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($conn); $configuration->setName('Doctrine Migration'); $configuration->setMigrationsNamespace('Cx\\Core_Modules\\Update\\Data\\Migrations'); $configuration->setMigrationsTableName(DBPREFIX . 'migration_versions'); $configuration->setMigrationsDirectory($this->cx->getCodeBaseCoreModulePath() . '/Update/Data/Migrations'); $configuration->registerMigrationsFromDirectory($this->cx->getCodeBaseCoreModulePath() . '/Update/Data/Migrations'); $this->cli->addCommands(array($this->getDoctrineMigrationCommand('\\Cx\\Core_Modules\\Update\\Model\\Entity\\MigrationsDiffDoctrineCommand', $configuration), $this->getDoctrineMigrationCommand('\\Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\ExecuteCommand', $configuration), $this->getDoctrineMigrationCommand('\\Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\GenerateCommand', $configuration), $this->getDoctrineMigrationCommand('\\Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\MigrateCommand', $configuration), $this->getDoctrineMigrationCommand('\\Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\StatusCommand', $configuration), $this->getDoctrineMigrationCommand('\\Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\VersionCommand', $configuration))); $this->cli->setAutoExit(false); return $this->cli; }
$dcConfig->setProxyNamespace('Orm\\Proxies'); $dcConfig->setEntityNamespaces(array('Orm\\Entity')); $dcConfig->setMetadataDriverImpl(new \Doctrine\ORM\Mapping\Driver\StaticPHPDriver(realpath(BASE_PATH . '/library/Orm/Entity'))); // create db connection (use Zend_Db like at bootstrap) require_once 'Zend/Db.php'; $dbConfig = $cmsConfig['db']; $dbAdapter = \Zend_Db::factory($dbConfig['adapter'], $dbConfig); $connectionOptions = array('pdo' => $dbAdapter->getConnection(), 'dbname' => $dbConfig['dbname']); // create entity manager $em = \Doctrine\ORM\EntityManager::create($connectionOptions, $dcConfig, new Doctrine\Common\EventManager()); // Create OutputWriter $output = new \Symfony\Component\Console\Output\ConsoleOutput(); $migrationOutputWriter = new \Doctrine\DBAL\Migrations\OutputWriter(function ($message) use($output) { $output->writeln($message); }); // create migration commands $migrationCommands = array(new \Doctrine\DBAL\Migrations\Tools\Console\Command\ExecuteCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\LatestCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\MigrateCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\StatusCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\VersionCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand()); // set config to migration commands $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($em->getConnection(), $migrationOutputWriter); $configuration->setMigrationsTableName('migrations'); $configuration->setMigrationsNamespace('Orm\\Migrations'); $configuration->setMigrationsDirectory(BASE_PATH . '/library/Orm/Migrations/'); $configuration->registerMigrationsFromDirectory(BASE_PATH . '/library/Orm/Migrations/'); foreach ($migrationCommands as $command) { $command->setMigrationConfiguration($configuration); } // Create and run ConsoleRunner $helperSet = \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($em); $helperSet->set(new \Symfony\Component\Console\Helper\DialogHelper(), 'dialog'); $cli = \Doctrine\ORM\Tools\Console\ConsoleRunner::createApplication($helperSet, $migrationCommands); $cli->run(null, $output);
/** * @param \Nette\DI\Container * @return \Doctrine\DBAL\Migrations\Configuration\Configuration */ public static function createServiceMigrationConfiguration(DI\Container $context) { $config = new \Doctrine\DBAL\Migrations\Configuration\Configuration($context->entityManager->getConnection()); $config->setName($this->configuration['migration']['name']); $config->setMigrationsTableName($this->configuration['migration']['table']); $config->setMigrationsDirectory($this->configuration['migration']['directory']); $config->setMigrationsNamespace($this->configuration['migration']['namespace']); $context->freeze(); return $config; }
/** * Executes DB changes based in the classes defined in * src/Chamilo/CoreBundle/Migrations/Schema/* * * @param string $chamiloVersion * @param EntityManager $manager * @throws \Doctrine\DBAL\DBALException */ function migrate($chamiloVersion, EntityManager $manager) { $debug = true; $connection = $manager->getConnection(); $config = new \Doctrine\DBAL\Migrations\Configuration\Configuration($connection); // Table name that will store migrations log (will be created automatically, // default name is: doctrine_migration_versions) $config->setMigrationsTableName('version'); // Namespace of your migration classes, do not forget escape slashes, do not add last slash $config->setMigrationsNamespace('Application\\Migrations\\Schema\\V' . $chamiloVersion); // Directory where your migrations are located $config->setMigrationsDirectory(api_get_path(SYS_PATH) . 'app/Migrations/Schema/V' . $chamiloVersion); // Load your migrations $config->registerMigrationsFromDirectory($config->getMigrationsDirectory()); $migration = new \Doctrine\DBAL\Migrations\Migration($config); $versions = $config->getMigrations(); /** @var Doctrine\DBAL\Migrations\Version $migrationItem */ foreach ($versions as $version) { $version->getMigration()->setEntityManager($manager); } $to = null; // if $to == null then schema will be migrated to latest version echo "<pre>"; try { // Execute migration! $migratedSQL = $migration->migrate($to); if ($debug) { foreach ($migratedSQL as $version => $sqlList) { echo "VERSION: {$version}<br>"; echo "----------------------------------------------<br>"; foreach ($sqlList as $sql) { echo "<code>{$sql}</code><br>"; } } echo "<br>DONE!<br>"; } return true; } catch (Exception $ex) { if ($debug) { echo "ERROR: {$ex->getMessage()}<br>"; return false; } } echo "</pre>"; return false; }
/** * Return the configuration needed for Migrations. * * @return \Doctrine\DBAL\Migrations\Configuration\Configuration */ protected function getMigrationConfiguration() { $this->output = array(); $that = $this; $outputWriter = new \Doctrine\DBAL\Migrations\OutputWriter(function ($message) use($that) { $that->output[] = $message; }); $configuration = new \Doctrine\DBAL\Migrations\Configuration\Configuration($this->entityManager->getConnection(), $outputWriter); $configuration->setMigrationsNamespace('TYPO3\\FLOW3\\Persistence\\Doctrine\\Migrations'); $configuration->setMigrationsDirectory(\TYPO3\FLOW3\Utility\Files::concatenatePaths(array(FLOW3_PATH_DATA, 'DoctrineMigrations'))); $configuration->setMigrationsTableName('flow3_doctrine_migrationstatus'); $configuration->createMigrationTable(); $databasePlatformName = $this->getDatabasePlatformName(); foreach ($this->packageManager->getActivePackages() as $package) { $configuration->registerMigrationsFromDirectory(\TYPO3\FLOW3\Utility\Files::concatenatePaths(array($package->getPackagePath(), 'Migrations', $databasePlatformName))); } return $configuration; }
#!/usr/bin/env php <?php use Symfony\Component\Console\Application; require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../app/bootstrap.php'; $application = new Application(); // Migrations Commands $configure = new \Doctrine\DBAL\Migrations\Configuration\Configuration($c['db.eng']); $configure->setMigrationsNamespace('EngMigration'); $configure->setMigrationsDirectory(DOCROOT . '/database-migration/versions'); $configure->registerMigrationsFromDirectory($configure->getMigrationsDirectory()); $configure->setMigrationsTableName('english_migration_versions'); $symfony_output = new \Symfony\Component\Console\Output\ConsoleOutput(); $symfony_output->setDecorated(true); $configure->setOutputWriter(new \Doctrine\DBAL\Migrations\OutputWriter(function ($msg) use($symfony_output) { $symfony_output->writeln($msg); })); $helperSet = new \Symfony\Component\Console\Helper\HelperSet(array('db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($c['db.eng']), 'dialog' => new \Symfony\Component\Console\Helper\DialogHelper(), 'configuration' => new \Doctrine\DBAL\Migrations\Tools\Console\Helper\ConfigurationHelper($c['db.eng'], $configure))); $application->setHelperSet($helperSet); $application->addCommands(array(new \Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\ExecuteCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\MigrateCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\StatusCommand(), new \Doctrine\DBAL\Migrations\Tools\Console\Command\VersionCommand())); $application->add(new \Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand()); $application->add(new \Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand()); $application->add(new \Doctrine\Bundle\DoctrineBundle\Command\GenerateEntitiesDoctrineCommand()); $application->add(new \Doctrine\Bundle\DoctrineBundle\Command\ImportMappingDoctrineCommand()); $application->add(new \Eng\Core\Command\Util\VoiceManager($c)); $application->run();