2017-07-17 61 views
0

我已經繼承了沒有遷移的Symfony 3項目。找不到Symfony 3 addIndex的原則遷移。爲什麼?

documentation之後,我在Symfony中添加了Doctrine Migrations Bundle。

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

新增的配置config.yml

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

然後加入裝載機appKernel.php

new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(), 

現在的控制檯顯示學說:遷移:*爲可用的功能,所以然後我生成我的遷移文件

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

然後繼續與Doctrine migrations documentation沿着以下內容:

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

現在,當我運行遷移:

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". 

現在,當我得到這個錯誤,我搜索上發現ocramius/ProxyManager。我用

composer require ocramius/proxy-manager "^2.0" 

安裝,仍然有同樣的錯誤。

當然,在大多數學說遷移文件,我看主要是addSql('ALTER TABLE ...')類型語句,但我想使用的包裝方法addIndexremoveIndex

有人能解釋如何讓這些功能的工作?

+0

引用的文檔看起來並不符合'doctrine-migrations-bundle'軟件包,但試試這個'$ schema-> getTable('table_name') - > addIndex(...)'檢查出'addIndex )'簽名。 – yceruto

回答

1

我想出了我的問題。該問題是由遷移文件執行以下操作解決:

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

的基本想法是,你需要抓住表中的引用,然後就可以addIndex對錶的特定列。與Doctrine文檔相反,您無法在通過Symfony2/3遷移中的表名稱的$ schema引用上添加索引。