2010-01-18 1 views

ответ

0

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

20
  1. изменить вашу схему

  2. пробег ./symfony doc:generate-migrations-diff

    это будет генерировать один или несколько файлы в Lib/кочевках/доктрине/

  3. пробег ./symfony doc:migrate

    это применит сгенерированные миграции к базе данных

  4. пробег ./symfony doc:build --all-classes

    это работает для Symfony> = 1,3/1,4 и восстановить все формы/фильтры/модели классов в соответствии с модифицированной схемой

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

1

Ярлык:

symfony doctrine:build --all-classes --and-migrate 
+0

необходимо сделать ./symfony doc: generate-migrations-diff сначала я думаю. – Populus

4

В случае, если вам нужно, чтобы написать сценарий миграции самостоятельно, вот пример синтаксиса - я не нашел правильную спецификацию синтаксиса в любом месте.

$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
Model: 
    column: 
    type: enum 
    values: [one, two, three] 

(optional:) 
    notnull: false 
    default: one #or two or three 
0

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

public function up(Schema $schema) 
{ 
    $this->connection->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); 
    ... 
} 
0

У меня была такая же проблема, и нашел решение, в наборе этот флаг в 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' 
       ) 
      ) 
     ); 
}