php Doctrine2 迁移向下迁移并从浏览器而不是命令行迁移

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9632701/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 07:18:52  来源:igfitidea点击:

Doctrine2 migrations migrate down and migrate from browser and not command line

phpmysqlsymfonydoctrine-orm

提问by giuseppe

I am using Doctrine2 migrations. I need some answers about my doubt, I canno find a good solution in documentations

我正在使用 Doctrine2 迁移。我需要一些关于我的疑问的答案,我在文档中找不到好的解决方案

I use:

我用:

  doctrine migrations:diff // generate migrations files
  doctrine migrations:migrate // migrates up to new version
  1. How Can I migrate down? specifying the previous version did not work ( nothing to update it says f.e. doctrine migrations:migrate Version20120211163332 it says

    Migrating up to Version20120211163332 from 20120309112058
    
    [Doctrine\DBAL\Migrations\MigrationException]  
    Could not find any migrations to execute.      
    

    But it's not up it should be down! you can see also on versions in response

  2. If I have to make some DB update, is it possible to add some SQL Queries in additions ( alter some datas related to other) ? I have not tried still since the down is not working :((

  3. Is there any way to use the migrate command in a browser nutshell ? I have sw in a shared hosting without console access so I need this feature, instead of copying queries one by one :D in phpMyAdmin

  1. 如何向下迁移?指定以前的版本不起作用(没有什么可更新的,它说 fe science migrations:migrate Version20120211163332 它说

    Migrating up to Version20120211163332 from 20120309112058
    
    [Doctrine\DBAL\Migrations\MigrationException]  
    Could not find any migrations to execute.      
    

    但它没有上升它应该下降!您还可以在版本上看到响应

  2. 如果我必须进行一些数据库更新,是否可以添加一些 SQL 查询(更改与其他相关的一些数据)?我还没有尝试过,因为向下不起作用:((

  3. 有没有办法在浏览器中使用 migrate 命令?我在没有控制台访问权限的共享主机中使用 sw,因此我需要此功能,而不是在 phpMyAdmin 中逐个复制查询:D

采纳答案by Aurel

I saw this doc on Symfony's website : http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#usage

我在 Symfony 的网站上看到了这个文档:http: //symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#usage

There is doctrine:migrations:executethat allows you to execute a single migration version up or down manually... but never tried, sorry.

doctrine:migrations:execute允许您手动向上或向下执行单个迁移版本......但从未尝试过,抱歉。

Hope this helps !

希望这可以帮助 !

Keep us posted.

随时关注我们。

回答by Julio

You can optionally manually specify the version you wish to migrate to:

您可以选择手动指定要迁移到的版本:

 php doctrine.php migrations:migrate YYYYMMDDHHMMSS

or execute a migration up/down

或执行向上/向下迁移

php doctrine.php migrations:execute YYYYMMDDHHMMSS  --down
php doctrine.php migrations:execute YYYYMMDDHHMMSS  --up

You can found YYYYMMDDHHMMSS using:

您可以使用以下方法找到 YYYYMMDDHHMMSS:

php doctrine.php migrations:status
>> Current Version:           2012-12-20 23:38:47 (20121220233847)
>> Latest Version:            2012-12-20 23:38:47 (20121220233847)

回答by mac

Here is how you can run migrations from browser:

以下是从浏览器运行迁移的方法:

composer.json

作曲家.json

{
    "require": {
        "doctrine/dbal": "*",
        "doctrine/migrations": "dev-master"
    },
    "minimum-stability": "dev",
    "autoload": {
        "psr-0": {"": "src/"}
    }
}

src/Acme/Migrations/Version1.php

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

<?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;
}

Now you can:

现在你可以:

Run it from console:

从控制台运行它:

php index.php- will migrate to lates version

php index.php- 将迁移到最新版本

php index.php 2- will migrate to version 2 (if current version is bigger - it will migrate down

php index.php 2- 将迁移到版本 2(如果当前版本更大 - 它将向下迁移

Run from web browser:

从网络浏览器运行:

http://localhost/index.phpand http://localhost/index.php?to=2will do the same.

http://localhost/index.php并且http://localhost/index.php?to=2会这样做。

回答by Sergey Zaharchenko

If you want to migrate 1 step down, you can use this syntax:

如果要向下迁移 1 个步骤,可以使用以下语法:

./doctrine migrations:migrate prev

To go to the first migration:

要进行第一次迁移:

./doctrine migrations:migrate first

To go to the next migration:

要进行下一次迁移:

./doctrine migrations:migrate next

Source: https://www.doctrine-project.org/projects/doctrine-migrations/en/1.8/reference/managing_migrations.html#managing-migrations

资料来源:https: //www.doctrine-project.org/projects/doctrine-migrations/en/1.8/reference/managing_migrations.html#managing-migrations