有人可以告诉我如何在我的架构中添加一个新的enum类型列以实现Doctrine Migration?
答案 0 :(得分:20)
修改架构
运行./symfony doc:generate-migrations-diff
这将在lib / migrations / doctrine /
运行./symfony doc:migrate
这会将生成的迁移应用于数据库
运行./symfony doc:build --all-classes
这适用于symfony> = 1.3 / 1.4并将根据修改后的架构重建所有表单/过滤器/模型类
请记住,生成的迁移是将新的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