php connexion - Génération d'une entité unique à partir d'une base de données existante à l'aide de symfony2 et de doctrine




doctrine:generate:entities update (9)

N'a fonctionné aucun de ceux-ci pour mon symfony 3.3. Je viens donc de créer une copie du répertoire et de générer à nouveau 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 en raison de ce problème https://github.com/symfony/symfony/issues/7717

Est-il possible de générer une seule entité à partir de la base de données à l'aide de l'outil de console Symfony2?

Au milieu du codage, j'ai dû ajouter une table 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!


Fonctionne très bien avec Symfony 3 aussi.

Si vous obtenez "Aucune classe de métadonnées à traiter". message Essayez de convertir votre nom de table à Doctrine chameau dans le paramètre filter.

"my_table_name" doit être écrit en tant que "MyTableName".


Solution de travail simple pour l'annotation de l'option 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 remplacer par MyMeeting dans filter="MyMeeting" pour que doctrine trouve le nom de votre table car elle MyMeeting toujours les underscores et ajoutera Camel-case au nom de votre table. non, vous obtiendrez cette erreur: "La base de données n'a 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 l' 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 ce n'est pas le cas, ajoutez-le.)

où:

  • AppBundle est exactement votre "AppBundle" dans Symfony 2.7
  • La réunion est la table cible (sensible à Camel-Case)

POUR ÊTRE SÛR, consultez ce répertoire:

src \ AppBundle / Ressources / config / doctrine / Meeting.orm.xml

ET ASSUREZ-VOUS que vous avez seulement des fichiers .xml pour la table que vous voulez créer des fichiers de classe d'entité et pas d'autres. Ensuite, exécutez cette commande ci-dessous pour générer des méthodes get et set pour votre classe d'entité que vous avez créée précédemment

$ php application / console doctrine: generate: entités AppBundle: réunion --no-backup

NOTE2: Comme dernière étape, vous devez supprimer le fichier xml doctrine orm db dans par exemple src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml

Cela fonctionne très bien pour moi.

Pour des explications s'il vous plaît lire: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html


Aucune des réponses ne me convenait parfaitement avec Symfony 3 . 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

Commentaire @ fyrye qui est actuellement caché mérite le crédit, voulait ajouter cela afin qu'il ne soit pas manqué par d'autres. 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 filtre uniquement après avoir lu les métadonnées de toutes vos tables qui, si elles n'ont pas de clés primaires ou ont un autre problème, provoqueront l'échec de la commande


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 car MySQL fournit le script de création).

Puis changé la connexion à cette nouvelle base de données et exécuté la commande d'extraction d'entité à partir de là.

Semble être un peu radical, mais je ne vais pas créer les entités à la main.

J'espère que cela pourra aider


Pour la troisième commande, la doctrine a continué à régénérer tous les fichiers Entity. En ajoutant le nom de l'entité après le paquet, il n'a généré que l'entité qui m'intéressait.

php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup

J'aurais laissé ceci comme un commentaire à 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 mappant plusieurs tables avec des chaînes coïncidentes dans les noms, on peut utiliser un pattern.

Exemples de noms de tables:

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 le fournisseur. Si vous voulez juste Vendor et pas 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!


Vous devez mettre à jour la fonction getTablePrimaryKeys pour:

private function getTablePrimaryKeys(Table $table)
{
    try {       
        $primaryKeyColumns = ($this->tables[$table->getName()]->hasPrimaryKey())?$this->tables[$table->getName()]->getPrimaryKey()->getColumns():array();
    } catch(SchemaException $e) {
        $primaryKeyColumns = array();
    }

    return array();
}




php database symfony doctrine