Может ли кто-нибудь рассказать мне, как я могу добавить новый столбец перечисления типа в мою схему, чтобы реализовать миграцию Doctrine?Добавить новый столбец перечисления во время миграции
ответ
Измените свою схему и не создавайте модель. запустите схему doctrine schema diff, тогда вам будет создан класс миграции. Наконец, вы можете восстановить ваши модели/форма/фильтров
изменить вашу схему
пробег
./symfony doc:generate-migrations-diff
это будет генерировать один или несколько файлы в Lib/кочевках/доктрине/
пробег
./symfony doc:migrate
это применит сгенерированные миграции к базе данных
пробег
./symfony doc:build --all-classes
это работает для Symfony> = 1,3/1,4 и восстановить все формы/фильтры/модели классов в соответствии с модифицированной схемой
помнить, что миграция генерируется сравнив new schema.yml к текущим классам моделей, поэтому, если вы перестроете свои классы перед запуском generate-migrations-diff, вы будете ввернуты.
Ярлык:
symfony doctrine:build --all-classes --and-migrate
В случае, если вам нужно, чтобы написать сценарий миграции самостоятельно, вот пример синтаксиса - я не нашел правильную спецификацию синтаксиса в любом месте.
$this->addColumn('tablename', 'column_name', 'enum', false,
array('fixed' => 1,
'values' =>
array(0 => 'auto',
1 => 'manual',
2 => 'unknown'),
'default' => 'unknown',
'notnull' => true,
'length' => NULL,
));
Model:
column:
type: enum
values: [one, two, three]
(optional:)
notnull: false
default: one #or two or three
Самый простой способ запустить ее из доктрины миграции является зарегистрировать новое отображение. Затем вы можете принудительно вводить значения внутри своего объекта, если это необходимо. (Doctrine MySQL Enums)
public function up(Schema $schema)
{
$this->connection->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
...
}
У меня была такая же проблема, и нашел решение, в наборе этот флаг в 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'
)
)
);
}
необходимо сделать ./symfony doc: generate-migrations-diff сначала я думаю. – Populus