2011-01-25 8 views
5

Hey. Tengo dificultades para migrar los cambios que hice en mi archivo config/doctrine/schema.yml.Mejor uso de modelos y migración en Symfony

Agregué la columna age a la tabla user. Luego hice un php symfony doctrine:generate-migrations-diff seguido de php symfony doctrine:migrate.

Al buscar en mi base de datos, ahora se agrega la columna age, sin borrar ningún dato.

Pero, mi /lib/model/doctrine/base/BaseUser.class.php no ha cambiado, no hay age campo o funciones para age. Así que también hice el comando php symfony doctrine:build-model. Finalmente, el modelo se actualiza/migra también.

Así que me pregunto, ¿es esta la única manera? Parece mucho trabajo, y me temo perder algo cada vez que lo hago.

Podría ir directamente a phpmyadmin, agregar cambios en la base de datos allí y simplemente hacer un php symfony doctrine:build-schema, y así omitir la parte de migración (dos comandos).

Además, cuando se trata de usar modelos, ¿no es cierto que /lib/model/doctrine/User.class.php es donde puedo hacer funciones y cosas así para mi "clase de datos" de usuario? Me gusta, haciendo una función isFemale. Si no, ¿dónde estaría ese tipo de función?

Esto podría ser una mala pregunta, pero ¿por qué la capa del modelo está dentro de la ruta/lib/doctrine? Por lo que he aprendido, mantienes los módulos dentro de las aplicaciones, donde creas tu vista y tu controlador. ¿Por qué debería el modelo estar afuera? De esta manera puedo hacer modelos sin controlador y vista adjuntos?

Gracias.

Respuesta

8

¿Por qué debe ser el modelo fuera

Dado que los modelos pueden ser utilizados por todas partes en su proyecto, en el ejemplo, en diferentes aplicaciones y módulos.

podría ir a la derecha en phpmyadmin, añadir los cambios en la base de datos existe y sólo hacer una doctrina Symfony PHP: build-esquema, y ​​al igual que omitir la parte de la migración (dos comandos).

Por supuesto que puede hacerlo, pero las migraciones son un buen método para rastrear su esquema al implementarlo en producción o trabajar en equipo.

Aquí cómo uso migraciones doctrina sencilla (casos de uso):

  1. añadir una columna age a mi modelo User en schema.yml
  2. ./symfony doctrine:generate-migrations-diff. La clase de migración (-es) se ha generado.
  3. ./symfony doctrine:migrate. La columna age se ha agregado correctamente a la tabla.
  4. ./symfony doctrine:build --all-classes. Formas/filtros/modelos de compilación

Eso es todo.La idea principal es que doctrine:generate-migrations-diff clase:

  1. recoge información sobre todas las estructuras de sus modelos (php-representación de schema.yml)
  2. compara su información schema.yml y desde (1)
  3. genera las clases migratorias basadas por diferencia de

también cuando el viene con el uso de modelos, estoy en lo cierto que /lib/model/doctrine/User.class.php es donde puedo hacer tales funciones y para mi usuario "clase de datos" ? Al igual, hacer una función es Femenina. Si no, ¿dónde estaría ese tipo de función?

Sí, puede agregar dicho método al modelo User porque trata sobre usuarios.

+1

+1 para una respuesta bien escrita y explicada –

+0

Ahora acabo de recibir un error, no pude generar clases de migración de la diferencia. No hay otro error que eso :( – Johannes

+1

Johannes, significa que el esquema y los modelos están sincronizados. Recuerde no crear modelos hasta que cree migraciones. – Darmen

Cuestiones relacionadas