====== Reverse Engineering d'une base avec Doctrine ====== Cette manipulation est à faire en **__début de projet__** pour repartir d'une base existante. Elle écrase tout ce qui existe et ne doit donc pas être faite en cours de développement. ===== Prérequis ===== Pour que la manipulation fonctionne, on doit au préalable : * Disposer des outils doctrine : > composer require symfony/orm-pack > composer require symfony/maker-bundle --dev * Avoir défini les éléments de connexion dans le fichier .env DATABASE_URL=mysql://:@127.0.0.1:3306/ ===== Import de la structure ===== Comme indiqué dans la documentation ([[https://symfony.com/doc/current/doctrine/reverse_engineering.html]]), cette commande récupère 70 à 80% de la structure, mais pas : * les associations inverses, * l'héritage, * les entités avec des clés étrangères comme clé primaire * les opérations sémantiques sur les associations telles que //cascade// ou les événements sur le cycle de vie (//on drop, on create, etc//)) Pour importer la structure, on utilisera : php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity Les entités sont créées dans le dossier défini par l'option **//--path//** (ici **//src/Entity//**). ===== Génération des getters et setters ===== La structure est importée sans les méthodes d'accès à la base de données. Il faut donc regénérer l'application entière ce qui écrase tout l'existant avec : php bin/console make:entity --regenerate App ===== Finalisation ===== L'importation ne génère pas les liens **//One-To-Many//** qui doivent être redéfinis manuellement. Toutes les options spécifiques (actions en cascade ou autres) doivent être réécrites dans les classes générées.