mapear generate generar from entidades datos create convert php database symfony doctrine

php - generate - symfony 4 create entity from database



Generación de una única entidad a partir de una base de datos existente utilizando symfony2 y doctrina (9)

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

En el medio de la codificación, 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!


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 los metadatos de todas sus tablas que, si no tienen claves primarias o tienen algún otro problema, harán que el comando falle


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".


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!


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


Para el tercer comando, la doctrina 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 doctrina 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 objetivos (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


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


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 doctrina cargará solo la entidad que necesita. ¡Tenga cuidado con el filtro, debe usar CamelCase!

Espero que esto te ayudará