Добавить новый столбец enum во время миграции - PullRequest
9 голосов
/ 18 января 2010

Может ли кто-нибудь сказать мне, как я могу добавить новый столбец типа enum в мою схему для реализации миграции Doctrine?

Ответы [ 7 ]

20 голосов
/ 19 января 2010
  1. измените вашу схему

  2. запустите ./symfony doc:generate-migrations-diff

    , это сгенерирует один или несколько файлов в lib / migrations / doctrine /

  3. Выполнить ./symfony doc:migrate

    Это будет применять сгенерированные миграции к базе данных

  4. Выполнить ./symfony doc:build --all-classes

    это работает для symfony> = 1.3 / 1.4 и перестроит все классы формы / фильтров / модели в соответствии с измененной схемой

помните, что миграция генерируется при сравнении нового schema.yml стекущие классы моделей, поэтому, если вы перестроите свои классы перед запуском generate-migrations-diff, вы облажались.

4 голосов
/ 05 ноября 2010

Если вам нужно написать скрипт миграции самостоятельно, вот пример синтаксиса - я нигде не нашел надлежащей спецификации для синтаксиса.

$this->addColumn('tablename', 'column_name', 'enum', false, 
                  array('fixed' => 1,
                        'values' => 
                         array(0 => 'auto',
                               1 => 'manual',
                               2 => 'unknown'),
                         'default' => 'unknown',
                         'notnull' => true,
                         'length' => NULL,
                   ));
1 голос
/ 07 октября 2010

Ярлык:

symfony doctrine:build --all-classes --and-migrate
0 голосов
/ 03 февраля 2013

У меня была та же проблема, и я нашел решение в установке этого флага в ProjectConfiguration.class.php

public function configureDoctrine(Doctrine_Manager $manager) {
    $manager->setAttribute(Doctrine_Core::ATTR_USE_NATIVE_ENUM, true);
}

После этого я использовал вызов этого метода и получил собственное перечисление mysql:

class MyMigration extends Doctrine_Migration_Base {
    public function up() {
        $this->changeColumn(self::tableName, 'columName', 'enum', null,
            array(
                'fixed' => true,
                'length' => null,
                'notnull' => true,
                'values' => array(
                    0 => 'Option 1',
                    1 => 'Option 2'
                )
            )
        );
}
0 голосов
/ 20 марта 2012

Самый простой способ запустить его из Doctrine Migration - это зарегистрировать новое сопоставление. Затем вы можете применить значения внутри вашей сущности, если это будет необходимо. ( Doctrine MySQL Enums )

public function up(Schema $schema)
{
    $this->connection->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
    ...
}
0 голосов
/ 09 января 2011
Model:  
  column:  
    type: enum  
    values: [one, two, three]  

(optional:)  
    notnull: false  
    default: one #or two or three  
0 голосов
/ 19 января 2010

Измените вашу схему и пока не строите модель. запустите схему доктрины diff, и вам будет создан класс миграции. Наконец, вы можете восстановить ваши модели / формы / фильтры

...