Afficher la pageAnciennes révisionsLiens de retourAjouter au livre.Exporter en PDFExportation ODTImport Word DocumentHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Reverse Engineering d'une base avec Doctrine ====== <WRAP center round important 60%> 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. </WRAP> ===== Prérequis ===== Pour que la manipulation fonctionne, on doit au préalable : * Disposer des outils doctrine : <code lscript> > composer require symfony/orm-pack > composer require symfony/maker-bundle --dev </code> * Avoir défini les éléments de connexion dans le fichier .env <code> DATABASE_URL=mysql://<db_user>:<db_password>@127.0.0.1:3306/<db_name> </code> ===== Import de la structure ===== <WRAP right round important 60%> 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//)) </WRAP> Pour importer la structure, on utilisera : <code lscript> php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity</code> 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 <wrap em>ce qui écrase tout l'existant</wrap> avec : <code lscript>php bin/console make:entity --regenerate App</code> ===== 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. doctrine4.txt Dernière modification : 2020/07/29 20:22de 127.0.0.1