2012-03-23 18 views
9

Estoy tratando de generar entidades desde la base de datos usando comandos de consola estándar como se describe en la documentación de Symfony2 aquí: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html.Cómo generar entidades desde la vista de base de datos con doctrine y symfony2

php app/console doctrine:mapping:convert --from-database --force yml "src/My/HomeBundle/Resources/config/doctrine/metadata/orm" 
php app/console doctrine:mapping:import MyHomeBundle yml 
php app/console doctrine:generate:entities MyHomeBundle 

Después de esto, todas las tablas se generan correctamente. El problema es que esto no generará entidades para las vistas de la base de datos. Cuando agrego yml archivos a mí mismo en src/Mi/HomeBundle/Resources/config/doctrine/metadata/ORM por ejemplo:

UserInGroup: 
    type: entity 
    table: user_in_group_view 
    fields: 
    id: 
     id: true 
     type: integer 
     unsigned: false 
     nullable: false 
     generator: 
     strategy: IDENTITY 
    userId: 
     type: integer 
     unsigned: false 
     nullable: false 
     column: user_id 
    userGroupId: 
     type: integer 
     unsigned: false 
     nullable: false 
     column: user_group_id 
    lifecycleCallbacks: { } 

me sale esta excepción cuando se ejecuta php app/console doctrine:generate:entities MyHomeBundle:

Notice: Undefined index: My\HomeBundle\Entity\UserInGroup in C:\Users\ThisIsMe\Projects\SymfonyTestProject\vendor\doctrine\lib\Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php line 121 

pregunta similar se publicado aquí: How to set up entity (doctrine) for database view in Symfony 2

Sé que puedo crear clases de Entidad, pero esperaba poder generar esto, así que si cambio mi vista, podría regenerar las clases de entidad. ¿Alguna sugerencia?

Respuesta

2

Ahora crea solo sus archivos orm. Debes seguir 2 pasos más. Te daré los pasos completos desde el comienzo.

Antes de hacer esto, elimine todos los archivos yml en su directorio de orm que haya creado antes.

espero MyHomeBundle es su nombre de lote

1).php app/console doctrine:mapping:convert yml ./src/My/HomeBundle/Resources/config/doctrine --from-database --force 

    Symfony2 generate entity from Database 

2).php app/console doctrine:mapping:import MyHomeBundle yml 

3).php app/console doctrine:generate:entities MyHomeBundle 

la esperanza que esto le ayuda.

+0

Estos son los mismos pasos que he descrito en mi pregunta y esto genera entidades para todas las tablas, no para las vistas. La diferencia está en la ruta de destino para los archivos yml generados. He intentado con su solución por las dudas, pero no resuelve el problema; solo las tablas se convierten en entidades.Sé que las versiones anteriores de Doctrine (y Symfony) podían generar entidades sin vistas sin ningún problema. – Kosta

0

Tengo el mismo problema, uso xml en lugar de yml, pero debe ser el mismo.

cheque en su entidad ORM si el nombre incluye la ruta correcta, exemple:

<entity name="Myapp\MyrBundle\Entity\MyEntity" table="myentity"> 

porque cuando generar mi ORM de la base de datos el nombre era así:

<entity name="MyEntity" table="myentity"> 

Así doctrina didn no entiendo el camino correcto

Espero que esté claro y esto te ayudará!

+0

verificado. Pensé en eso y probé una combinación diferente sin suerte. Pero gracias de cualquier manera. – Kosta

+0

¿puedes pasar la entidad UserInGroup? – Snroki

+0

la cuestión es que no quería crear entidad por mi cuenta, sino hacer que Doctrine lo hiciera por mí. Finalmente, he creado la entidad y ahora estoy trabajando con ella, pero la pregunta aún persiste. – Kosta

-1

Como se puede ver aquí: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html el proceso de ingeniería inversa a partir db a entidad no se materializa plenamente y sin embargo:

"A medida que la documentación de herramientas Doctrina dice, la ingeniería inversa es un proceso de una sola vez para empezar En un proyecto, Doctrine puede convertir aproximadamente el 70-80% de la información de mapeo necesaria basada en campos, índices y restricciones de clave externa. Doctrine no puede descubrir asociaciones inversas, tipos de herencia, entidades con claves externas como claves primarias o operaciones semánticas. en asociaciones tales como eventos en cascada o de ciclo de vida. Posteriormente será necesario realizar un trabajo adicional en las entidades generadas para diseñar cada una para que se ajuste a su modelo de dominio sp ecificidades ".

Cuestiones relacionadas