66 votes

Générer une seule Entité à partir d'une base de données existante en utilisant symfony2 et doctrine

Est-il possible de générer une seule entité à partir de la base de données en utilisant l'outil console Symfony2?

En plein codage, j'ai dû ajouter une table et des modifications ont été apportées aux classes d'entité existantes. Je ne veux donc pas que toutes mes entités soient régénérées.

Toute suggestion sera appréciée!

1 votes

De nombreuses personnes semblent encore avoir des problèmes avec une base de données qui a des tables sans clés primaires - '--filter' lit toujours ces tables, et échoue. Utilisez la configuration doctrine.yaml : doctrine.dbal.connections.CONNECTION_NAME.schema_filter: ~^(table_prefix_name_).*~ ou utilisez l'expression régulière pour sauter des tables spécifiques

4voto

peej Points 51

J'aurais laissé ceci comme commentaire à la réponse acceptée mais je suis un débutant.

Pour ceux qui, comme moi, ont eu des difficultés avec l'option --filter pour mapper plusieurs tables avec des chaînes de caractères coïncidentes dans les noms, on peut utiliser un motif.

Exemples de noms de table :

Fournisseur ContactFournisseur

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

Cette commande convertira les deux tables plutôt que seulement Fournisseur. Si vous voulez uniquement Fournisseur et pas ContactFournisseur, utilisez un motif dans --filter :

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

J'espère que cela aidera quelqu'un !

3voto

Ivo Necchi Points 43

Fonctionne également très bien avec Symfony 3.

Si vous obtenez le message "Aucune classe de métadonnées à traiter", essayez de convertir votre nom de table en notation camélée Doctrine dans le paramètre de filtre.

"my_table_name" doit être écrit comme "MyTableName".

3voto

user13424261 Points 31

--filter fonctionne avec le nom de l'entité, pas le nom de la table ! php bin/console doctrine:mapping:import "App\Entity" annotation --path=config/doctrine --filter="VotreEntité"

2voto

max4ever Points 2420

Pour Symfony 3

Pour générer les entités d'une nouvelle table "Groupe"

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group

entrez ici la description de l'image

comme écrit dans la documentation Symfony 3

1voto

Nicolas Points 503

J'ai exactement rencontré le même problème avec Symfony 2.4 et MySQL.

Aucun des contournements mentionnés ci-dessus n'a fonctionné pour moi.

J'ai fini par créer une nouvelle base de données avec les tables que je veux extraire (ceci peut être facile à faire car MySQL fournit le script de création).

Ensuite, j'ai changé la connexion vers cette nouvelle base de données et j'ai exécuté la commande d'extraction des entités à partir de là.

Cela semble un peu radical, mais je ne vais pas créer les entités manuellement.

J'espère que cela aide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X