如何在蛋糕直流迁移中使用ENUM?

时间:2013-10-17 07:22:16

标签: cakephp-2.0 cakedc

通过使用cake-DC迁移,我们可以编写字符串,整数的迁移 我们可以使用ENUM吗?

2 个答案:

答案 0 :(得分:0)

我迟到了两年但是看看这个存储库。有一个解决方案可以使用CakePHP在迁移中不支持的任何数据类型。

您将进行基本迁移,以便在您的应用程序中扩展CakeMigration以使用它。它将调用以数据类型命名的策略,例如ENUM类型:

https://github.com/leonardolessa/mywallet/blob/master/app/Lib/Migrations/BaseMigration.php

每个策略实现一个接口:

https://github.com/leonardolessa/mywallet/blob/master/app/Lib/Migrations/StrategyInterface.php

策略本身只运行ALTER TABLE以在表中添加不受支持的类型:

https://github.com/leonardolessa/mywallet/blob/master/app/Lib/Migrations/EnumStrategy.php

请不要忘记,如果您可能想要使用不支持的类型而cake bake,那么您将度过糟糕的时光。

答案 1 :(得分:-1)

您只能使用CakePHP ORM支持的数据库驱动程序的数据类型。不支持枚举,请使用伪造的枚举。

请参阅http://api.cakephp.org/2.4/class-Mysql.html# $ columns

array(
    'primary_key' => array('name' => 'NOT NULL AUTO_INCREMENT'),
    'string' => array('name' => 'varchar', 'limit' => '255'),
    'text' => array('name' => 'text'),
    'biginteger' => array('name' => 'bigint', 'limit' => '20'),
    'integer' => array('name' => 'int', 'limit' => '11', 'formatter' => 'intval'),
    'float' => array('name' => 'float', 'formatter' => 'floatval'),
    'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'),
    'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'),
    'time' => array('name' => 'time', 'format' => 'H:i:s', 'formatter' => 'date'),
    'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'),
    'binary' => array('name' => 'blob'),
    'boolean' => array('name' => 'tinyint', 'limit' => '1')
)

您可以扩展Mysql源并添加该类型,但这会破坏您应用的跨数据库兼容性。但无论如何,这是一个不太可能的案例。