migrations entidades crear php mysql symfony doctrine2

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

  1. ¿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

  2. 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: ((

  3. ¿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)