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

Symfony1 在迁移期间添加新的枚举列,symfony1,migration,doctrine,Symfony1,Migration,Doctrine,有谁能告诉我,如何向我的模式中添加一个enum类型的新列,以实现条令迁移?修改您的模式,但不要构建模型。运行doctrine schema diff,然后将为您生成一个迁移类。最后,您可以重建模型/表单/过滤器 修改您的模式 运行/symfony doc:generate migrations diff 这将在lib/migrations/doctor中生成一个或多个文件/ 运行/symfony doc:migrate 这将把生成的迁移应用到数据库 运行/symfony doc:build

有谁能告诉我,如何向我的模式中添加一个enum类型的新列,以实现条令迁移?

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

  • 修改您的模式

  • 运行
    /symfony doc:generate migrations diff

    这将在lib/migrations/doctor中生成一个或多个文件/

  • 运行
    /symfony doc:migrate

    这将把生成的迁移应用到数据库

  • 运行
    /symfony doc:build--所有类

    这适用于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,
                       ));
    

    从条令迁移运行它的最简单方法是注册一个新映射。然后,如果需要,可以在实体内强制执行值。()


    我也遇到了同样的问题,并在
    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:我想先生成不同的迁移。
    public function configureDoctrine(Doctrine_Manager $manager) {
        $manager->setAttribute(Doctrine_Core::ATTR_USE_NATIVE_ENUM, true);
    }
    
    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'
                    )
                )
            );
    }