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