通过使用 cake-DC 迁移,我们可以为字符串编写迁移,整数我们也可以使用 ENUM 吗???
2 回答
我只是迟到了两年,但看看这个存储库。有一个解决方案可以在迁移中使用 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
那么您将度过一段糟糕的时光。
您只能使用 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 源并添加该类型,但这会破坏您的应用程序的跨数据库兼容性。但无论如何,这是一个不太可能发生的情况。