2010-09-03 1 views
1

Я использую Symfony 1.4 с доктриной.Symfony Doctrine migrations: removeIndex не работает

Вот моя первоначальная схема:

Page: 
    tableName: page 
    columns: 
    ref: 
     type: string(50) 
     notnull: true 
     unique: true 

Я хотел бы, чтобы удалить индекс по столбцу реф с помощью миграции. Таким образом, схема становится:

Page: 
    tableName: page 
    columns: 
    ref: 
     type: string(50) 
     notnull: true 

И мой файл миграции что-то вроде:

class Changepageref extends Doctrine_Migration_Base 
{ 
    public function up() 
    { 
    $this->removeIndex('page','ref'); 
    } 

    public function down() 
    { 
    $this->addIndex('page','ref', array('fields'=>array('ref'=>array()),'unique'=>true)); 
    } 
} 

Но это не будет работать, когда я запускаю его, потому что он ищет индекс с именем «ref_idx». Но если я посмотрю на свою базу данных, доктрина создала индекс с именем «ref», а не «ref_idx».

Что я делаю неправильно?

ответ

0

Вы можете определить имена по умолчанию для индексов: по умолчанию используется «_idx». Вы можете изменить его в диспетчере соединений.

http://www.doctrine-project.org/projects/orm/1.2/docs/manual/configuration/en#naming-convention-attributes показывает его как

$ Manager-> SetAttribute (Doctrine_Core :: ATTR_IDXNAME_FORMAT, '% s_index');

Попробуйте установить его там, и он должен быть постоянным во всем приложении с именами индексов.

+0

Если значение по умолчанию «_idx», то почему индекс, созданный Dotrine, был «ref», а не «ref_idx»? –

+0

Возможно, это ошибка или какой-то проводной конфиг или аналогичный. Если вы установите формат IDX, он работает? Другим случаем может быть то, что 'addIndex()' не использует переменную IDX_FORMAT, поэтому вам нужно придерживаться данной схемы – DrColossos