From 81324ec8268005049d3e8722bea0c97cd6e03a9e Mon Sep 17 00:00:00 2001 From: "Jonathan.Wage" Date: Thu, 11 Oct 2007 03:23:33 +0000 Subject: [PATCH] Fleshing out functionality of CLI system and changed syntax of migration classes to only required a to parameter since we already know where we are coming from. --- lib/Doctrine.php | 227 ++++++++++++++++++ lib/Doctrine/Cli.php | 24 +- lib/Doctrine/Cli/Task.php | 4 + lib/Doctrine/Cli/Task/CreateDb.php | 4 +- lib/Doctrine/Cli/Task/CreateTables.php | 6 +- lib/Doctrine/Cli/Task/DropDb.php | 4 +- lib/Doctrine/Cli/Task/DumpData.php | 23 +- lib/Doctrine/Cli/Task/GenerateMigration.php | 7 +- .../Cli/Task/GenerateModelsFromDb.php | 8 +- .../Cli/Task/GenerateModelsFromYaml.php | 7 +- lib/Doctrine/Cli/Task/GenerateSql.php | 9 +- lib/Doctrine/Cli/Task/GenerateYamlFromDb.php | 43 ++++ .../Cli/Task/GenerateYamlFromModels.php | 7 +- lib/Doctrine/Cli/Task/LoadData.php | 10 +- lib/Doctrine/Cli/Task/LoadDummyData.php | 45 ++++ lib/Doctrine/Cli/Task/Migrate.php | 4 +- lib/Doctrine/Data/Export.php | 2 +- lib/Doctrine/Export.php | 8 +- lib/Doctrine/Migration.php | 48 ++-- manual/new/docs/en/migration.txt | 14 +- 20 files changed, 452 insertions(+), 52 deletions(-) create mode 100644 lib/Doctrine/Cli/Task/GenerateYamlFromDb.php create mode 100644 lib/Doctrine/Cli/Task/LoadDummyData.php diff --git a/lib/Doctrine.php b/lib/Doctrine.php index 40bbdb9a9..a2453c24f 100644 --- a/lib/Doctrine.php +++ b/lib/Doctrine.php @@ -516,6 +516,53 @@ final class Doctrine { return Doctrine_Manager::connection()->import->importSchema($directory, $databases); } + /** + * generateModelsFromDb + * + * Generate your model definitions from an existing database + * + * @param string $directory + * @param string $array + * @return void + */ + public static function generateModelsFromDb($directory, array $databases = array()) + { + return self::importSchema($directory, $databases); + } + /** + * generateYamlFromDb + * + * Generates models from database to temporary location then uses those models to generate a yaml schema file. + * This should probably be fixed. We should write something to generate a yaml schema file directly from the database. + * + * @param string $yamlPath + * @return void + */ + public static function generateYamlFromDb($yamlPath) + { + $directory = '/tmp/tmp_doctrine_models'; + + Doctrine::generateModelsFromDb($directory); + + $export = new Doctrine_Export_Schema(); + + return $export->exportSchema($yamlPath, 'yml', $directory); + } + /** + * generateModelsFromYaml + * + * Generate a yaml schema file from an existing directory of models + * + * @param string $yamlPath + * @param string $directory + * @return void + */ + public static function generateModelsFromYaml($yamlPath, $directory) + { + $import = new Doctrine_Import_Schema(); + + return $import->importSchema($yamlPath, 'yml', $directory); + } /** * exportSchema * method for exporting Doctrine_Record classes to a schema @@ -526,6 +573,182 @@ final class Doctrine { return Doctrine_Manager::connection()->export->exportSchema($directory); } + /** + * createTablesFromModels + * + * Creates database tables for the models in the specified directory + * + * @param string $directory + * @return void + */ + public static function createTablesFromModels($directory = null) + { + return self::exportSchema($directory); + } + /** + * generateYamlFromModels + * + * Generate yaml schema file for the models in the specified directory + * + * @param string $yamlPath + * @param string $directory + * @return void + */ + public static function generateYamlFromModels($yamlPath, $directory) + { + $export = new Doctrine_Export_Schema(); + + return $export->exportSchema($yamlPath, 'yml', $directory); + } + /** + * createDatabases + * + * Creates databases for connections + * + * @param string $specifiedConnections + * @return void + */ + public static function createDatabases($specifiedConnections) + { + if (!is_array($specifiedConnections)) { + $specifiedConnections = (array) $specifiedConnections; + } + + $connections = Doctrine_Manager::getInstance()->getConnections(); + + foreach ($connections as $name => $connection) { + if (!empty($specifiedConnections) && !in_array($name, $specifiedConnections)) { + continue; + } + + $connection->export->createDatabase($name); + } + } + /** + * dropDatabases + * + * Drops databases for connections + * + * @param string $specifiedConnections + * @return void + */ + public static function dropDatabases($specifiedConnections = array()) + { + if (!is_array($specifiedConnections)) { + $specifiedConnections = (array) $specifiedConnections; + } + + $connections = Doctrine_Manager::getInstance()->getConnections(); + + foreach ($connections as $name => $connection) { + if (!empty($specifiedConnections) && !in_array($name, $specifiedConnections)) { + continue; + } + + $connection->export->dropDatabase($name); + } + } + /** + * dumpData + * + * Dump data to a yaml fixtures file + * + * @param string $yamlPath + * @param string $individualFiles + * @return void + */ + public static function dumpData($yamlPath, $individualFiles = false) + { + $data = new Doctrine_Data(); + + return $data->exportData($yamlPath, 'yml', array(), $individualFiles); + } + /** + * loadData + * + * Load data from a yaml fixtures file. + * The output of dumpData can be fed to loadData + * + * @param string $yamlPath + * @param string $append + * @return void + */ + public static function loadData($yamlPath, $append = false) + { + $delete = isset($append) ? ($append ? false : true) : true; + + if ($delete) + { + $models = Doctrine::getLoadedModels(); + + foreach ($models as $model) + { + $model = new $model(); + + $model->getTable()->createQuery()->delete($model)->execute(); + } + } + + $data = new Doctrine_Data(); + + return $data->importData($yamlPath, 'yml'); + } + /** + * loadDummyData + * + * Populdate your models with dummy data + * + * @param string $append + * @param string $num + * @return void + */ + public static function loadDummyData($append, $num = 5) + { + $delete = isset($append) ? ($append ? false : true) : true; + + if ($delete) + { + $models = Doctrine::getLoadedModels(); + + foreach ($models as $model) + { + $model = new $model(); + + $model->getTable()->createQuery()->delete($model)->execute(); + } + } + + $data = new Doctrine_Data(); + + return $data->importDummyData($num); + } + + public static function migrate($directory, $to = null) + { + $migration = new Doctrine_Migration($directory); + + return $migration->migrate($to); + } + + public static function generateMigrationClass($className, $directory) + { + $migration = new Doctrine_Migration($directory); + $next = (string) $migration->getNextVersion(); + + $fileName = str_repeat('0', (3 - strlen($next))) . $next . '_' . Doctrine::tableize($className) . '.class.php'; + $path = $directory . DIRECTORY_SEPARATOR . $fileName; + + $code = 'export->exportSql($directory); } + public static function generateSqlFromModels($directory) + { + return self::exportSql($directory); + } /** * compile * method for making a single file of most used doctrine runtime components diff --git a/lib/Doctrine/Cli.php b/lib/Doctrine/Cli.php index ce4ddf524..a5299e832 100644 --- a/lib/Doctrine/Cli.php +++ b/lib/Doctrine/Cli.php @@ -34,6 +34,12 @@ class Doctrine_Cli { protected $tasks = array(); protected $scriptName = null; + protected $config = array(); + + public function __construct($config = array()) + { + $this->config = $config; + } public function run($args) { @@ -55,14 +61,30 @@ class Doctrine_Cli $taskInstance->taskName = str_replace('_', '-', Doctrine::tableize(str_replace('Doctrine_Cli_Task_', '', $taskName))); $args = $taskInstance->prepareArgs($args); + $args = $this->prepareArgs($args); $taskInstance->validate($args); - $taskInstance->execute($args); + + + $taskInstance->execute(); } else { throw new Doctrine_Cli_Exception('Cli task could not be found: '.$taskClass); } } + protected function prepareArgs($args) + { + if (is_array($this->config) && !empty($this->config)) { + foreach ($this->config as $key => $value) { + if (array_key_exists($key, $args)) { + $args[$key] = $value; + } + } + } + + return $args; + } + public function printTasks() { $tasks = $this->loadTasks(); diff --git a/lib/Doctrine/Cli/Task.php b/lib/Doctrine/Cli/Task.php index 8b567c3a2..6f0158f63 100644 --- a/lib/Doctrine/Cli/Task.php +++ b/lib/Doctrine/Cli/Task.php @@ -42,6 +42,8 @@ abstract class Doctrine_Cli_Task public function validate($args) { + $this->arguments = $args; + $requiredArguments = $this->getRequiredArguments(); foreach ($requiredArguments as $arg) { @@ -64,6 +66,8 @@ abstract class Doctrine_Cli_Task foreach ($requiredArguments as $key => $arg) { if (isset($args[$count])) { $prepared[$arg] = $args[$count]; + } else { + $prepared[$arg] = null; } $count++; diff --git a/lib/Doctrine/Cli/Task/CreateDb.php b/lib/Doctrine/Cli/Task/CreateDb.php index 92847cd89..58148bc9a 100644 --- a/lib/Doctrine/Cli/Task/CreateDb.php +++ b/lib/Doctrine/Cli/Task/CreateDb.php @@ -36,5 +36,7 @@ class Doctrine_Cli_Task_CreateDb extends Doctrine_Cli_Task $optionalArguments = array('connection' => 'Optionally specify a single connection to create the database for.'); public function execute() - { } + { + Doctrine::createDatabases($this->getArgument('connection')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/CreateTables.php b/lib/Doctrine/Cli/Task/CreateTables.php index 88c51c6e0..076c2f685 100644 --- a/lib/Doctrine/Cli/Task/CreateTables.php +++ b/lib/Doctrine/Cli/Task/CreateTables.php @@ -33,9 +33,11 @@ class Doctrine_Cli_Task_CreateTables extends Doctrine_Cli_Task { public $description = 'Create tables for all existing database connections', - $requiredArguments = array(), + $requiredArguments = array('models_path' => 'Specify path to your models directory.'), $optionalArguments = array(); public function execute() - { } + { + Doctrine::createTablesFromModels($this->getArgument('models_path')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/DropDb.php b/lib/Doctrine/Cli/Task/DropDb.php index 4c8673e4b..4618601c3 100644 --- a/lib/Doctrine/Cli/Task/DropDb.php +++ b/lib/Doctrine/Cli/Task/DropDb.php @@ -37,5 +37,7 @@ class Doctrine_Cli_Task_DropDb extends Doctrine_Cli_Task $optionalArguments = array('connection' => 'Optionally specify a single connection to drop the database for.'); public function execute() - { } + { + Doctrine::dropDatabases($this->getArgument('connection')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/DumpData.php b/lib/Doctrine/Cli/Task/DumpData.php index be7c8af49..2b071b8cc 100644 --- a/lib/Doctrine/Cli/Task/DumpData.php +++ b/lib/Doctrine/Cli/Task/DumpData.php @@ -33,9 +33,26 @@ class Doctrine_Cli_Task_DumpData extends Doctrine_Cli_Task { public $description = 'Dump data to a yaml data fixture file.', - $requiredArguments = array('path' => 'Specify the full path to write the yaml data fixtures file to.'), - $optionalArguments = array(); + $requiredArguments = array('data_fixtures_path' => 'Specify path to write the yaml data fixtures file to.', + 'models_path' => 'Specify path to your Doctrine_Record definitions.'), + $optionalArguments = array('individual_files' => 'Specify whether or not you want to dump to individual files. One file per model.'); public function execute() - { } + { + Doctrine::loadModels($this->getArgument('models_path')); + + $individualFiles = $this->getArgument('individual_files') ? true:false; + + $path = $this->getArgument('data_fixtures_path'); + + if (!$individualFiles) { + $e = explode('.', $this->getArgument('data_fixtures_path')); + + if (end($e) !== 'yml') { + $path = $this->getArgument('data_fixtures_path'). DIRECTORY_SEPARATOR . 'data.yml'; + } + } + + Doctrine::dumpData($path, $individualFiles); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/GenerateMigration.php b/lib/Doctrine/Cli/Task/GenerateMigration.php index 1fb43c5b3..0ddb8bcce 100644 --- a/lib/Doctrine/Cli/Task/GenerateMigration.php +++ b/lib/Doctrine/Cli/Task/GenerateMigration.php @@ -33,9 +33,12 @@ class Doctrine_Cli_Task_GenerateMigration extends Doctrine_Cli_Task { public $description = 'Generate new migration class definition', - $requiredArguments = array('path' => 'Specify the complete path to your migration classes folder.'), + $requiredArguments = array('class_name' => 'Name of the migration class to generate', + 'migrations_path' => 'Specify the complete path to your migration classes folder.'), $optionalArguments = array(); public function execute() - { } + { + Doctrine::generateMigrationClass($this->getArgument('class_name'), $this->getArgument('migrations_path')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/GenerateModelsFromDb.php b/lib/Doctrine/Cli/Task/GenerateModelsFromDb.php index 46d71f7da..d8343ffcf 100644 --- a/lib/Doctrine/Cli/Task/GenerateModelsFromDb.php +++ b/lib/Doctrine/Cli/Task/GenerateModelsFromDb.php @@ -33,9 +33,11 @@ class Doctrine_Cli_Task_GenerateModelsFromDb extends Doctrine_Cli_Task { public $description = 'Generates your Doctrine_Record definitions from your existing database connections.', - $requiredArguments = array(), - $optionalArguments = array(); + $requiredArguments = array('models_path' => 'Specify path to your Doctrine_Record definitions.'), + $optionalArguments = array('connection' => 'Optionally specify a single connection to generate the models for.'); public function execute() - { } + { + Doctrine::generateModelsFromDb($this->getArgument('models_path'), (array) $this->getArgument('connection')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/GenerateModelsFromYaml.php b/lib/Doctrine/Cli/Task/GenerateModelsFromYaml.php index 2a23f0098..2bda59997 100644 --- a/lib/Doctrine/Cli/Task/GenerateModelsFromYaml.php +++ b/lib/Doctrine/Cli/Task/GenerateModelsFromYaml.php @@ -33,9 +33,12 @@ class Doctrine_Cli_Task_GenerateModelsFromYaml extends Doctrine_Cli_Task { public $description = 'Generates your Doctrine_Record definitions from a Yaml schema file', - $requiredArguments = array('path' => 'Specify the complete directory path to write the models to.'), + $requiredArguments = array('yaml_schema_path' => 'Specify the complete directory path to your yaml schema files.', + 'models_path' => 'Specify complete path to your Doctrine_Record definitions.'), $optionalArguments = array(); public function execute() - { } + { + Doctrine::generateModelsFromYaml($this->getArgument('yaml_schema_path'), $this->getArgument('models_path')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/GenerateSql.php b/lib/Doctrine/Cli/Task/GenerateSql.php index 78a5e889c..6688131cb 100644 --- a/lib/Doctrine/Cli/Task/GenerateSql.php +++ b/lib/Doctrine/Cli/Task/GenerateSql.php @@ -33,9 +33,14 @@ class Doctrine_Cli_Task_GenerateSql extends Doctrine_Cli_Task { public $description = 'Generate sql for all existing database connections.', - $requiredArguments = array(), + $requiredArguments = array('models_path' => 'Specify complete path to your Doctrine_Record definitions.', + 'sql_path' => 'Path to write the generated sql.'), $optionalArguments = array(); public function execute() - { } + { + $sql = Doctrine::generateSqlFromModels($this->getArgument('models_path')); + + file_put_contents($this->getArgument('sql_path'), implode("\n", $sql)); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/GenerateYamlFromDb.php b/lib/Doctrine/Cli/Task/GenerateYamlFromDb.php new file mode 100644 index 000000000..b4c81943b --- /dev/null +++ b/lib/Doctrine/Cli/Task/GenerateYamlFromDb.php @@ -0,0 +1,43 @@ +. + */ + +/** + * Doctrine_Cli_Task_GenerateYamlFromDb + * + * @package Doctrine + * @subpackage Cli + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision: 2761 $ + * @author Jonathan H. Wage + */ +class Doctrine_Cli_Task_GenerateYamlFromDb extends Doctrine_Cli_Task +{ + public $description = 'Generates a Yaml schema file from an existing database', + $requiredArguments = array('yaml_schema_path' => 'Specify the path to your yaml schema files.'), + $optionalArguments = array(); + + public function execute() + { + Doctrine::generateYamlFromDb($this->getArgument('yaml_schema_path')); + } +} \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/GenerateYamlFromModels.php b/lib/Doctrine/Cli/Task/GenerateYamlFromModels.php index 5de825334..cfdd64949 100644 --- a/lib/Doctrine/Cli/Task/GenerateYamlFromModels.php +++ b/lib/Doctrine/Cli/Task/GenerateYamlFromModels.php @@ -33,9 +33,12 @@ class Doctrine_Cli_Task_GenerateYamlFromModels extends Doctrine_Cli_Task { public $description = 'Generates a Yaml schema file from existing Doctrine_Record definitions', - $requiredArguments = array('path' => 'Specify the complete path to write the yaml schema file to.'), + $requiredArguments = array('yaml_schema_path' => 'Specify the complete directory path to your yaml schema files.', + 'models_path' => 'Specify complete path to your Doctrine_Record definitions.'), $optionalArguments = array(); public function execute() - { } + { + Doctrine::generateYamlFromModels($this->getArgument('yaml_schema_path'), $this->getArgument('models_path')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/LoadData.php b/lib/Doctrine/Cli/Task/LoadData.php index 511d5ab31..91412e491 100644 --- a/lib/Doctrine/Cli/Task/LoadData.php +++ b/lib/Doctrine/Cli/Task/LoadData.php @@ -1,6 +1,6 @@ 'Specify the complete path to load the yaml data fixtures files from.'), + $requiredArguments = array('data_fixtures_path' => 'Specify the complete path to load the yaml data fixtures files from.', + 'models_path' => 'Specify path to your Doctrine_Record definitions.'), $optionalArguments = array(); public function execute() - { } + { + Doctrine::loadModels($this->getArgument('models_path')); + Doctrine::loadData($this->getArgument('data_fixtures_path')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/LoadDummyData.php b/lib/Doctrine/Cli/Task/LoadDummyData.php new file mode 100644 index 000000000..90935db43 --- /dev/null +++ b/lib/Doctrine/Cli/Task/LoadDummyData.php @@ -0,0 +1,45 @@ +. + */ + +/** + * Doctrine_Cli_Task_LoadDummyData + * + * @package Doctrine + * @subpackage Cli + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision: 2761 $ + * @author Jonathan H. Wage + */ +class Doctrine_Cli_Task_LoadDummyData extends Doctrine_Cli_Task +{ + public $description = 'Load data from a yaml data fixture file.', + $requiredArguments = array('models_path' => 'Specify path to your Doctrine_Record definitions.'), + $optionalArguments = array('append' => 'Whether or not to append the data or to delete all data before loading.', + 'num' => 'Number of records to populate for each model.'); + + public function execute() + { + Doctrine::loadModels($this->getArgument('models_path')); + Doctrine::loadDummyData($this->getArgument('append') ? true:false, $this->getArgument('num') ? $this->getArgument('num'):5); + } +} \ No newline at end of file diff --git a/lib/Doctrine/Cli/Task/Migrate.php b/lib/Doctrine/Cli/Task/Migrate.php index 617d77dc0..b825867bf 100644 --- a/lib/Doctrine/Cli/Task/Migrate.php +++ b/lib/Doctrine/Cli/Task/Migrate.php @@ -37,5 +37,7 @@ class Doctrine_Cli_Task_Migrate extends Doctrine_Cli_Task $optionalArguments = array('version' => 'Version to migrate to. If you do not specify, the db will be migrated from the current version to the latest.'); public function execute() - { } + { + Doctrine::migrate($this->getArgument('version')); + } } \ No newline at end of file diff --git a/lib/Doctrine/Data/Export.php b/lib/Doctrine/Data/Export.php index eae6d57d6..dbc683647 100644 --- a/lib/Doctrine/Data/Export.php +++ b/lib/Doctrine/Data/Export.php @@ -104,7 +104,7 @@ class Doctrine_Data_Export extends Doctrine_Data } foreach ($data as $className => $classData) { - Doctrine_Parser::dump($classData->toArray(), $format, $directory.DIRECTORY_SEPARATOR.$className.'.'.$format); + Doctrine_Parser::dump(array($className => $classData), $format, $directory.DIRECTORY_SEPARATOR.$className.'.'.$format); } } else { if (is_dir($directory)) { diff --git a/lib/Doctrine/Export.php b/lib/Doctrine/Export.php index 4cac4c436..53cd567b3 100644 --- a/lib/Doctrine/Export.php +++ b/lib/Doctrine/Export.php @@ -976,8 +976,12 @@ class Doctrine_Export extends Doctrine_Connection_Module * @return void */ public function exportSchema($directory = null) - { - $models = Doctrine::loadModels($directory); + { + if ($directory !== null) { + $models = Doctrine::loadModels($directory); + } else { + $models = Doctrine::getLoadedModels(); + } $this->exportClasses($models); } diff --git a/lib/Doctrine/Migration.php b/lib/Doctrine/Migration.php index aaefbd175..8dc18df8b 100644 --- a/lib/Doctrine/Migration.php +++ b/lib/Doctrine/Migration.php @@ -142,12 +142,27 @@ class Doctrine_Migration continue; } - $loadedClasses[$name] = $fileName; + $e = explode('_', $fileName); + $classMigrationNum = (int) $e[0]; + + $loadedClasses[$classMigrationNum] = $fileName; } $this->migrationClasses = $loadedClasses; - return $loadedClasses; + return $this->migrationClasses; + } + + /** + * getMigrationClasses + * + * @return void + * @author Jonathan H. Wage + */ + + public function getMigrationClasses() + { + return $this->migrationClasses; } /** @@ -213,15 +228,18 @@ class Doctrine_Migration $this->loadMigrationClasses(); $versions = array(); - foreach ($this->migrationClasses as $name => $fileName) { - $e = explode('_', $fileName); - $version = (int) $e[0]; - $versions[$version] = $version; + foreach ($this->migrationClasses as $classMigrationNum => $fileName) { + $versions[$classMigrationNum] = $classMigrationNum; } rsort($versions); - return $versions[0]; + return isset($versions[0]) ? $versions[0]:0; + } + + public function getNextVersion() + { + return $this->getLatestVersion() + 1; } /** @@ -234,12 +252,7 @@ class Doctrine_Migration */ protected function getMigrationClass($num) { - $classes = $this->migrationClasses; - - foreach ($classes as $className => $fileName) { - $e = explode('_', $fileName); - $classMigrationNum = (int) $e[0]; - + foreach ($this->migrationClasses as $classMigrationNum => $fileName) { if ($classMigrationNum === $num) { return new $className(); } @@ -297,16 +310,17 @@ class Doctrine_Migration * @param string $to * @return void */ - public function migrate($from = null, $to = null) + public function migrate($to = null) { + $from = $this->getCurrentVersion(); + // If nothing specified then lets assume we are migrating from the current version to the latest version - if ($from === null && $to === null) { - $from = $this->getCurrentVersion(); + if ($to === null) { $to = $this->getLatestVersion(); } if ($from === $to) { - throw new Doctrine_Migration_Exception('You specified an invalid migration path. The from and to cannot be the same. You specified from: ' . $from . ' and to: ' . $to); + throw new Doctrine_Migration_Exception('Already up-to-date'); } $direction = $from > $to ? 'down':'up'; diff --git a/manual/new/docs/en/migration.txt b/manual/new/docs/en/migration.txt index 5e5f3b714..2815d03fb 100644 --- a/manual/new/docs/en/migration.txt +++ b/manual/new/docs/en/migration.txt @@ -93,15 +93,11 @@ class AddUser extends Doctrine_Migration ++ Performing Migrations -$migration = new Doctrine_Migration('migration_classes'); -$migration->migrate(0, 1); -$migration->migrate(1, 2); -$migration->migrate(2, 3); +$migration = new Doctrine_Migration('/path/to/migration_classes'); -// Then revert back to version 1 -$migration->migrate(3, 2); -$migration->migrate(2, 1); -$migration->migrate(1, 0); +// Assume current version is 0 +$migration->migrate(3); // takes you from 0 to 3 +$migration->migrate(0); // takes you from 3 to 0 -echo $migration->getCurrentVersion(); // should echo 0 +echo $migration->getCurrentVersion(); // 0 \ No newline at end of file