Est-il possible de générer une seule entité à partir d'une base de données à l'aide de l'outil de la console Symfony2?
Au milieu du codage, j'ai dû ajouter un tableau et des modifications ont été apportées aux classes d'entités existantes. Donc, je ne veux pas que toutes mes entités soient régénérées.
Toute suggestion sera appréciée!
J'ai eu le même problème, vous avez à faire de cette façon:
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Yourtablename"
Ensuite
php app/console doctrine:mapping:import AppMyBundle \
metadata_format --filter="Yourtablename"
Où metadata_format
est le fichier se terminant que vous souhaitez générer (par exemple, xml, yml, annotation)
Et enfin
php app/console doctrine:generate:entities AppMyBundle --no-backup
Comme ceci doctrine ne chargera que l'entité dont vous avez besoin. Faites attention au filtre, vous devez utiliser CamelCase!
J'espère que ceci vous aidera
Pour la troisième commande, doctrine conservait la régénération de tous les fichiers d'entité. En ajoutant le nom de l'entité après l'ensemble, elle ne générait que l'entité qui m'intéressait.
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
Solution de travail simple pour l'annotation des options Symfony 2.7 et pour [/ xml/yml], voir http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
faire 3 commandes en 3 étapes:
$ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting"
( REMARQUE: si le nom de votre base de données est my_meeting
Vous devrez le changer en MyMeeting
dans filter="MyMeeting"
for doctrine pour trouver votre nom de table. Ceci est dû au fait que doctrine supprimera toujours les caractères de soulignement et ajoutera Camel-case à votre nom de table. Sinon, vous obtiendra cette erreur: "La base de données ne contient aucune information de mappage".)
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
( NOTE: en vous assurant que vous avez namespace AppBundle\Entity;
comme ci-dessous dans votre fichier de classe Meeting.php comme ceci:
<?php
/**
* Created by PhpStorm.
* User:
* Date: 03-Sep-2015
* Time: 3:23 PM
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
Si non, ajoutez-le.)
où:
POUR ÊTRE SÛR, consultez ce répertoire:
src\AppBundle/Resources/config/doctrine/Meeting.orm.xml
ET ASSUREZ-VOUS que vous ne disposez que de fichiers .xml pour la table pour laquelle vous souhaitez créer des fichiers de classe d'entités, et aucun autre. Puis exécutez cette commande ci-dessous pour générer des méthodes get et set pour votre classe d'entité créée précédemment
$ php app/console doctrine: générer: entités AppBundle: Meeting --no-backup
NOTE2: À la dernière étape, vous devez supprimer le fichier xml doctrine orm db, par exemple, src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml
Cela fonctionne très bien pour moi.
Pour plus d'explications, veuillez lire: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
Le commentaire de @ fyrye qui est actuellement caché mérite le crédit, je voulais l'ajouter afin que les autres ne l'aient pas manqué. C'est l'approche:
/** @var \Doctrine\DBAL\Connection $connection */
$config = $connection->getConfiguration();
// for excluding an specific table
$config->setFilterSchemaAssetsExpression('/^(table_to_reverse_engineer_1|table_to_reverse_engineer_2).*$/');
source: https://coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with
J'avais des problèmes lors de l'exécution de la commande suivante en raison du grand nombre de tables héritées mal définies
php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/
Il s'avère que l'indicateur --filter ne filtre qu'après avoir lu les métadonnées de toutes vos tables qui, si elles ne possèdent pas de clé primaire ou d'autre problème, feront échouer la commande.
Aucune des réponses ne me convenait parfaitement avec Symfony. J'ai fini par faire:
php bin/console doctrine:mapping:import --force MyBundle xml --filter="MyTable"
php bin/console doctrine:mapping:convert annotation ./src --filter="MyTable"
php bin/console doctrine:generate:entities MyBundle:MyTable --path ./src
Fonctionne également très bien avec Symfony 3.
Si vous obtenez "Pas de classes de métadonnées à traiter". message essayez de convertir votre nom de fichier en Doctrine camel dans le paramètre filter.
"my_table_name" doit être écrit en tant que "MyTableName".
J'aurais laissé cela comme un commentaire sur la réponse acceptée, mais je suis un débutant.
Pour ceux qui comme moi ont eu des problèmes avec le commutateur --filter qui mappe plusieurs tables avec des chaînes coïncidentes dans les noms, on peut utiliser un modèle.
Exemple de noms de table:
Vendeur VendeurContact
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Vendor"
Cette commande convertira les deux tables plutôt que simplement Vendor. Si vous voulez juste Vendor et non VendorContact, utilisez un motif dans --filter:
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="\bVendor\b"
J'espère que ça aide quelqu'un!
J'ai eu exactement le même problème avec Symfony 2.4 et MySQL.
Aucune des solutions de contournement affichées 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 (cela peut être facile à faire car MySQL fournit le script de création).
Puis modifié la connexion à cette nouvelle base de données et exécuté la commande d'extraction d'entité à partir de là.
Cela semble être un peu radical, mais je ne créerai pas les entités à la main.
J'espère que ça t'as aidé
pour Symfony 3
Pour générer les entités pour une nouvelle table "Groupe"
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group
comme écrit dans le documentation de symfony
Cela n'a pas fonctionné pour mon symfony 3.3. Je viens donc de créer une copie du répertoire et de re-générer toutes les entités du répertoire de copie. Ensuite, j'ai copié les entités requises dans mon répertoire d'origine.
--filter ne fonctionne pas à cause de ce problème https://github.com/symfony/symfony/issues/7717