在迁移期间添加新的枚举列

时间:2010-01-18 11:11:20

标签: symfony1 migration doctrine

有人可以告诉我如何在我的架构中添加一个新的enum类型列以实现Doctrine Migration?

7 个答案:

答案 0 :(得分:20)

  1. 修改架构

  2. 运行./symfony doc:generate-migrations-diff

    这将在lib / migrations / doctrine /

  3. 中生成一个或多个文件
  4. 运行./symfony doc:migrate

    这会将生成的迁移应用于数据库

  5. 运行./symfony doc:build --all-classes

    这适用于symfony> = 1.3 / 1.4并将根据修改后的架构重建所有表单/过滤器/模型类

  6. 请记住,生成的迁移是将新的schema.yml与当前的模型类进行比较,因此如果在运行generate-migrations-diff之前重建类,则会搞砸。

答案 1 :(得分: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,
                   ));

答案 2 :(得分:1)

快捷方式:

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

答案 3 :(得分:0)

修改架构,不要构建模型。运行doctrine schema diff,然后将为您生成一个迁移类。最后,您可以重建模型/表单/过滤器

答案 4 :(得分:0)

从Doctrine Migration运行它的最简单方法是注册新映射。然后,如果需要,您可以在实体内部强制执行值。 (Doctrine MySQL Enums

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

答案 5 :(得分: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'
                )
            )
        );
}

答案 6 :(得分:-1)

Model:  
  column:  
    type: enum  
    values: [one, two, three]  

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