Generación de una única entidad a partir de una base de datos existente utilizando symfony2 y doctrine

¿Es posible generar una sola entidad desde la base de datos utilizando la herramienta de consola Symfony2?

En el medio de la encoding, tuve que agregar una tabla y se hicieron modificaciones a las clases de entidades existentes. Entonces no quiero que todas mis entidades sean regeneradas.

¡Cualquier sugerencia será apreciada!

Tuve el mismo problema, debes hacerlo de esta manera:

php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="Yourtablename" 

Entonces

 php app/console doctrine:mapping:import AppMyBundle \ metadata_format --filter="Yourtablename" 

Donde metadata_format es el final del archivo que desea generar (por ejemplo, xml, yml, anotación)

Y finalmente

 php app/console doctrine:generate:entities AppMyBundle --no-backup 

Al igual que esta doctrine cargará solo la entidad que necesita. ¡Tenga cuidado con el filtro, debe usar CamelCase!

Espero que esto te ayudará

Para el tercer comando, la doctrine siguió regenerando todos los archivos de Entity. Al agregar el nombre de la entidad después del paquete, solo generó la entidad que me interesaba.

 php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup 

Solución de trabajo simple para anotación de opción Symfony 2.7 y para [/ xml / yml] ver http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

Haz 3 comandos en 3 pasos:

 $ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting" 

( NOTA: si su nombre de base de datos es my_meeting , necesitará cambiarlo a MyMeeting en filter="MyMeeting" para que la doctrine encuentre su nombre de tabla. Esto se debe a que doctrine siempre quitará guiones bajos y agregará Camel-case al nombre de su tabla. no, obtendrá este error: “La base de datos no tiene ninguna información de mapeo” ).

 $ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting" 

( NOTA: asegúrese de tener el namespace AppBundle\Entity; como se muestra a continuación en su archivo de clase Meeting.php de la siguiente manera:

 < ?php /** * Created by PhpStorm. * User: * Date: 03-Sep-2015 * Time: 3:23 PM */ namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; 

Si no, agrégalo).

dónde:

  • AppBundle es exactamente su "AppBundle" en Symfony 2.7
  • La reunión es la tabla de objectives (sensible a Camel-Case)

PARA ESTAR SEGURO, consulte este directorio:

src \ AppBundle / Resources / config / doctrine / Meeting.orm.xml

Y ASEGURÁNDOSE de que solo tiene archivos .xml para la tabla en la que desea crear los archivos de clase de entidad y no otros. Luego ejecute este comando debajo para generar métodos get y set para su clase de entidad que creó previamente

$ php app / console doctrine: generate: entidades AppBundle: Meeting --no-backup

NOTA 2: como último paso, debe eliminar el archivo xml doctrine orm db, por ejemplo, src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml

Funciona muy bien para mí.

Para la explicación, lea: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

El comentario de @fyrye que actualmente está oculto merece el crédito, quería agregar esto para que otros no lo pierdan. Este es el enfoque:

 /** @var \Doctrine\DBAL\Connection $connection */ $config = $connection->getConfiguration(); // for excluding an specific table $config->setFilterSchemaAssetsExpression('/^(table_to_reverse_engineer_1|table_to_reverse_engineer_2).*$/'); 

fuente: https://coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with

Tenía problemas al ejecutar el siguiente comando debido a la gran cantidad de tablas heredadas mal definidas

 php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/ 

Resulta que el indicador –filter solo filtra DESPUÉS de haber leído metadatos de todas sus tablas que, si no tienen claves primarias o tienen algún otro problema, harán que el comando falle

Hubiera dejado esto como un comentario a la respuesta aceptada, pero soy un novato.

Para aquellos como yo que tuvimos problemas con el cambio de filtro mapeando múltiples tablas con cadenas coincidentes en los nombres, uno puede usar un patrón.

Nombres de tabla de ejemplo:

Vendedor ProveedorContacto

 php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="Vendor" 

Ese comando convertirá ambas tablas en lugar de solo el Proveedor. Si solo desea Proveedor y no Proveedor, use un patrón en –filter:

 php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="\bVendor\b" 

Espero que ayude a alguien!

Funciona muy bien con Symfony 3 también.

Si obtiene “Sin clases de metadatos para procesar”. mensaje intente convertir su nombre de tabla a Doctrine camel casing en el parámetro de filtro.

“my_table_name” debe escribirse como “MyTableName”.

Tenía exactamente el mismo problema con Symfony 2.4 y MySQL.

Ninguna de las soluciones publicadas anteriormente funcionó para mí.

Terminé creando una nueva base de datos con las tablas que quiero extraer (esto puede ser fácil porque MySQL proporciona el script de creación).

Luego cambió la conexión a esa nueva base de datos y ejecutó el comando de extracción de entidad desde allí.

Parece ser un poco radical, pero no crearé las entidades a mano.

Espero que ayude

Ninguna de las respuestas fue correcta para mí al usar Symfony 3 . Terminé haciendo:

 php bin/console doctrine:mapping:import --force MyBundle xml --filter="MyTable" php bin/console doctrine:mapping:convert annotation ./src --filter="MyTable" php bin/console doctrine:generate:entities MyBundle:MyTable --path ./src 

No funcionó ninguno de estos para mi Symfony 3.3. Así que acabo de crear una copia del directorio y volví a generar todas las entidades en el directorio de copia. Luego copié las entidades requeridas en mi directorio original.

–filter no funciona debido a este problema https://github.com/symfony/symfony/issues/7717