我正在使用Doctrine2迁移。我需要一些关于我的疑问的答案,我在文件中找不到好的解决方案
我使用:
doctrine migrations:diff // generate migrations files
doctrine migrations:migrate // migrates up to new version
如何向下迁移?指定以前的版本不起作用(没有任何更新,它说f.e.原则迁移:migrate Version20120211163332它说
Migrating up to Version20120211163332 from 20120309112058 [Doctrine'DBAL'Migrations'MigrationException] Could not find any migrations to execute.
但它不在上面,它应该在下面!你也可以在版本上看到响应
如果我必须进行一些数据库更新,是否可以添加一些SQL查询(更改与其他数据相关的一些数据)?我还没有试过,因为向下不起作用:(
有什么方法可以在浏览器中使用migrate命令吗?我在共享主机中有sw,没有控制台访问权限,所以我需要这个功能,而不是一个接一个地复制查询:phpMyAdmin 中的D
您可以选择手动指定要迁移到的版本:
php doctrine.php migrations:migrate YYYYMMDDHHMMSS
或者执行向上/向下迁移
php doctrine.php migrations:execute YYYYMMDDHHMMSS --down
php doctrine.php migrations:execute YYYYMMDDHHMMSS --up
您可以使用找到YYYYMMDDHMMSS
php doctrine.php migrations:status
>> Current Version: 2012-12-20 23:38:47 (20121220233847)
>> Latest Version: 2012-12-20 23:38:47 (20121220233847)
如果您想向下迁移1步,可以使用以下语法:
./doctrine migrations:migrate prev
转到第一次迁移:
./doctrine migrations:migrate first
转到下一次迁移:
./doctrine migrations:migrate next
来源:https://www.doctrine-project.org/projects/doctrine-migrations/en/1.8/reference/managing_migrations.html#managing-迁移
我在Symfony的网站上看到了这个文档:http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#usage
doctrine:migrations:execute
允许您手动向上或向下执行单个迁移版本。。。但从未尝试过,对不起。
希望这能有所帮助!
随时通知我们。
以下是如何从浏览器运行迁移:
composer.json
{
"require": {
"doctrine/dbal": "*",
"doctrine/migrations": "dev-master"
},
"minimum-stability": "dev",
"autoload": {
"psr-0": {"": "src/"}
}
}
src/Acme/Migrations/Version1.php
<?php # src/Acme/Migrations/Version1.php
namespace Acme'Migrations;
use Doctrine'DBAL'Migrations'AbstractMigration;
use Doctrine'DBAL'Schema'Schema;
/**
* Class Version1
*
* Notice that file and class names MUST be Version*.php
*
* @package Acme'Migrations
*/
class Version1 extends AbstractMigration
{
public function up(Schema $schema)
{
$users = $schema->createTable('users');
$users->addColumn('id', 'integer', array('unsigned' => true, 'autoincrement' => true));
$users->addColumn('username', 'string', array('length' => 128));
$users->addColumn('password', 'string', array('length' => 128));
$users->setPrimaryKey(array('id'));
// You can also add any queries
// $this->addSql('CREATE TABLE addresses (id INT NOT NULL, street VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB');
}
public function down(Schema $schema)
{
$schema->dropTable('users');
//$this->addSql('DROP TABLE addresses');
}
// Use this functions to prepare your migrations
//public function preUp(Schema $schema) {}
//public function postUp(Schema $schema) {}
//public function preDown(Schema $schema) {}
//public function postDown(Schema $schema) {}
}
index.php
<?php # index.php
use Doctrine'DBAL'DriverManager;
use Doctrine'DBAL'Migrations'Configuration'Configuration;
use Doctrine'DBAL'Migrations'Migration;
use Doctrine'DBAL'Migrations'OutputWriter;
require_once 'vendor/autoload.php';
$nl = PHP_SAPI == 'cli' ? PHP_EOL : '<br>'; // Optional will be used for output
$to = null; // Optional integer - migrate to version, if null - will migrate to latest available version
#region Optional get argument
$index = PHP_SAPI == 'cli' ? 1 : 'to';
$arguments = PHP_SAPI == 'cli' ? $argv : $_REQUEST;
$to = isset($arguments[$index]) && filter_var($arguments[$index], FILTER_VALIDATE_INT) ? intval($arguments[$index]) : null;
#endregion
#region Doctrine Connection
// Silex: $app['db']
// Symfony controller: $this->get('database_connection')
$db = DriverManager::getConnection(array(
'dbname' => 'doctine_migrations',
'user' => 'root',
'password' => 'root',
'host' => 'localhost',
'driver' => 'pdo_mysql',
'charset' => 'utf8',
'driverOptions' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
)
));
#endregion
#region Config
$config = new Configuration($db /*, new OutputWriter(function ($message) { echo $message . PHP_EOL; })*/); // OutputWriter is optional and by default do nothing, accepts closure for writing logs
//$config->setName('My Migrations'); // Optional name for your migrations
$config->setMigrationsTableName('version'); // Table name that will store migrations log (will be created automatically, default name is: doctrine_migration_versions)
$config->setMigrationsNamespace('Acme''Migrations'); // Namespace of your migration classes, do not forget escape slashes, do not add last slash
$config->setMigrationsDirectory('src/Acme/Migrations'); // Directory where your migrations are located
$config->registerMigrationsFromDirectory($config->getMigrationsDirectory()); // Load your migrations
#endregion
$migration = new Migration($config); // Create Migration based on provided configuration
$versions = $migration->getSql($to); // Retrieve SQL queries that should be run to migrate you schema to $to version, if $to == null - schema will be migrated to latest version
#region Some dummy output
foreach ($versions as $version => $queries) {
echo 'VERSION: ' . $version . $nl;
echo '----------------------------------------------' . $nl . $nl;
foreach ($queries as $query) {
echo $query . $nl . $nl;
}
echo $nl . $nl;
}
#endregion
try {
$migration->migrate($to); // Execute migration!
echo 'DONE' . $nl;
} catch (Exception $ex) {
echo 'ERROR: ' . $ex->getMessage() . $nl;
}
现在您可以:
从控制台运行:
php index.php
-将迁移到最新版本
php index.php 2
-将迁移到版本2(如果当前版本更大,它将向下迁移
从web浏览器运行:
CCD_ 4和CCD_。
在我的例子中,它看起来如下:
还原更改:
php bin/console doctrine:migrations:execute "VendorName'ProjectName'Account'Migrations'Version20201002092643" --down
处理迁移:
php bin/console doctrine:migrations:execute "VendorName'ProjectName'Account'Migrations'Version20201002092643" --up
或者只是
php bin/console doctrine:migrations:execute "VendorName'ProjectName'Account'Migrations'Version20201002092643"
我的Symfony迁移配置如下:
doctrine_migrations:
migrations_paths:
# namespace is arbitrary but should be different from App'Migrations
# as migrations classes should NOT be autoloaded
'DoctrineMigrations': '%kernel.project_dir%/migrations'
'VendorName'ProjectName'Account'Migrations': '%kernel.project_dir%/component/account/migrations'