2017-07-17 2 views
0

J'ai hérité d'un projet Symfony 3 sans migrations.Doctrine Migrations avec Symfony 3 addIndex non trouvé. Pourquoi?

Après le documentation, j'ai ajouté le paquet de migration de Doctrine à Symfony.

$ composer require doctrine/doctrine-migrations-bundle "^1.0" 

Ajouté à la configuration config.yml

doctrine_migrations: 
    dir_name: "%kernel.root_dir%/DoctrineMigrations" 
    namespace: Application\Migrations 
    table_name: migration_versions 
    name: Application Migrations 

ensuite ajouté le chargeur à appKernel.php

new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(), 

La console affiche désormais la doctrine: les migrations: * les fonctionnalités disponibles, donc J'ai ensuite généré mon fichier de migration

php bin/console doctrine:migrations:generate 
Generated new migration class to "/path/to/project/app/DoctrineMigrations/Version20100621140655.php" 

ensuite continué suivant avec le Doctrine migrations documentation:

public function up(Schema $schema) 
{ 
    // alter my table 
    $options = ['fields' => ['type_id']]; 
    $schema->addIndex('advertiser', 'idx_type_id', $options); 
    ... 
} 

Maintenant, quand je lance la migration:

Migrating up to 20170714165306 from 20170714155549 

++ migrating 20170714165306 

[Symfony\Component\Debug\Exception\UndefinedMethodException]                             
Attempted to call an undefined method named "addIndex" of class "ProxyManagerGeneratedProxy\__PM__\Doctrine\DBAL\Schema\Schema\Generatedaca9b50393335f8354881e485c485329". 

Maintenant, quand je suis arrivé cette erreur, je cherchais sur cela et trouvé ocramius/ProxyManager. J'ai installé cela avec

composer require ocramius/proxy-manager "^2.0" 

Toujours eu la même erreur.

Certes, dans la plupart des documents Migrations Doctrine, je vois principalement addSql('ALTER TABLE ...') déclarations de type, mais je veux utiliser les méthodes wrapper addIndex, removeIndex, etc.

Quelqu'un peut-il expliquer comment obtenir ces fonctionnalités de travail?

+0

La documentation référencée ne ressemble pas au paquetage 'doctrine-migrations-bundle', mais essayez ceci' $ schema-> getTable ('table_name') -> addIndex (...) 'consultez le' addIndex () 'signature. – yceruto

Répondre

1

J'ai trouvé mon problème. Le problème est résolu en procédant comme suit dans le fichier de migration:

public function up(Schema $schema) 
{ 
    // alter my table 
    $table = $schema->getTable('advertiser'); 
    $table->addIndex(['type_id'], 'idx_type_id'); 
    ... 
} 

L'idée de base est que vous devez saisir une référence à la table, et vous pouvez AddIndex à la colonne spécifique sur la table. Contrairement aux Doctrine Docs, vous ne pouvez pas ajouter un index sur une référence $ schema en passant le nom de la table dans une migration Symfony2/3.