php - entidades - Las migraciones de Doctrine2 migran hacia abajo y migran desde el navegador y no desde la lĂnea de comandos
crear entidades symfony 3 (3)
Así es como puede ejecutar migraciones desde el navegador:
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;
}
Ahora usted puede:
Ejecutarlo desde la consola:
php index.php
- migrará a la última versión
php index.php 2
- migrará a la versión 2 (si la versión actual es más grande, migrará hacia abajo)
Ejecutar desde el navegador web:
http://localhost/index.php
y http://localhost/index.php?to=2
harán lo mismo.
Estoy usando migraciones de Doctrine2. Necesito algunas respuestas sobre mi duda, no puedo encontrar una buena solución en la documentación
Yo suelo:
doctrine migrations:diff // generate migrations files
doctrine migrations:migrate // migrates up to new version
¿Cómo puedo migrar hacia abajo? la especificación de la versión anterior no funcionó (no hay nada para actualizar, dice fe doctrine migrations: migrate Version20120211163332 dice
Migrating up to Version20120211163332 from 20120309112058 [Doctrine/DBAL/Migrations/MigrationException] Could not find any migrations to execute.
¡Pero no está terminado, debería estar abajo! puedes ver también en las versiones en respuesta
Si tengo que hacer alguna actualización de DB, ¿es posible agregar algunas consultas SQL en adiciones (alterar algunos datos relacionados con otros)? No lo he intentado todavía porque el plumón no funciona: ((
¿Hay alguna forma de usar el comando migrate en un navegador? He accedido a un alojamiento compartido sin acceso a la consola, así que necesito esta característica, en lugar de copiar consultas una a una: D en phpMyAdmin
Opcionalmente, puede especificar manualmente la versión a la que desea migrar:
php5 doctrine.php migrations:migrate YYYYMMDDHHMMSS
o ejecuta una migración arriba / abajo
php5 doctrine.php migrations:execute YYYYMMDDHHMMSS --down
php5 doctrine.php migrations:execute YYYYMMDDHHMMSS --up
Puede encontrar YYYYMMDDHHMMSS usando:
php5 doctrine.php migrations:status
>> Current Version: 2012-12-20 23:38:47 (20121220233847)
>> Latest Version: 2012-12-20 23:38:47 (20121220233847)
Vi este documento en el sitio web de Symfony: http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#usage
Hay doctrine:migrations:execute
que te permite ejecutar una única versión de migración hacia arriba o hacia abajo manualmente ... pero nunca lo intenté, lo siento.
Espero que esto ayude !
Que nos mantengais.