Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Las consultas se ejecutan pero los cambios no se ven reflejados - MySQL

29 de julio de 2015

Hola buen dia.

Tengo un problema con MySQL. Estoy trabajando con una app en Symfony usando el bundle DoctrineMigrations, al ejecutar el comando doctrine:migrations:diff se genera una clase con las sentencas SQL necesarias para que se deben ejecutar para que la base de datos este actualizada según la información en las entidades.

Hasta aquí todo bien, después de generar la clase PHP ejecuto el comando doctrine:migrations:migrate, lo cual ejecuta las sentencias SQL, el mensaje del comando es que todo se realizo bien.

El problema es que al ejecutar nuevamente el comando doctrine:migrations:diff (sin haber hecho cambios en las entidades) las mismas sentencias SQL se vuelven a generar en una nueva clase PHP.

Creí que era el Bundle por lo que procedí a ejecutar las sentencias directamente por línea de comandos de MySQL, después de ejecutar el query, MySQL retorna x filas afectadas.

Pero en el esquema de base de datos los cambios no se ven reflejados, es como si la consulta se ejecutara pero no se escribieran los cambios.

He probado en dos servers MySQL diferentes, uno local y otro remoto y en ambos pasa lo mismo, la raro es que en PostgreSQL todos los querys se ejecutan y se guardan.

¿Alguna idea de por qué MySQL no guarda los cambios?

Gracias.


Respuestas

#1

Faltaría saber cómo son las sentencias definidas en los métodos $this->addSql() del archivo de migración. Si son sentencias tipo CREATE INDEX y COMMENT ON COLUMN, es posible que MySQL las ejecute siempre pero PostgreSQL detecte que esos cambios ya se han aplicado y no hace falta volver a aplicarlos.

@javiereguiluz

31 julio 2015, 8:50
#2

Hola @javiereguiluz, gracias por tu respuesta.

Son sentencias como esta:

$this->addSql('ALTER TABLE fos_user_user CHANGE enabled enabled TINYINT(1) NOT NULL, CHANGE locked locked TINYINT(1) NOT NULL, CHANGE expired expired TINYINT(1) NOT NULL, CHANGE credentials_expired credentials_expired TINYINT(1) NOT NULL');

Y efectivamente algunas son de CREATE INDEX como esta:

$this->addSql('CREATE INDEX IDX_7B41C54FB8D8DFA7 ON producto (id)');

Gracias por tu ayuda.

@ramiroanacona

31 julio 2015, 17:17
#3

Hola @javiereguiluz aun no termino de resolver este problema.

Como lo mencionas algunas consultas son de tipo CREATE INDEX pero y las otras consultas de cambio de tipo de campo, porque no se ejecutan?

Gracias por tu ayuda.

@ramiroanacona

22 agosto 2015, 17:30