Table des matières
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://<db_user>:<db_password>@127.0.0.1:3306/<db_name>
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.