我正在开发一个项目并使用Yii的迁移功能来保持不同的生产和测试系统同步。我必须说我喜欢这个工具。 我的问题是有没有办法创建自定义抽象数据类型?
我知道Yii的迁移功能允许在多个DBMS系统中创建表,但我的站点仅限于MySQL,因此应该有所帮助。 我想做的是:
$this->createTable('test_table', array(
'key'=>'pk',
'active_YN'=>'yn',
));
而不是:
$this->createTable('test_table', array(
'key'=>'pk',
'active_YN'=>'TINYINT(1) NOT NULL DEFAULT \'1\'',
));
我猜我不得不延长CDbMigration,可能有行为吗?
非常感谢。
答案 0 :(得分:4)
如果您仍想制作技巧,可以试试这里。
MySQL默认使用驱动程序CMysqlSchema。您需要使用自定义抽象列类型扩展此类。
class MyCustomMysqlSchema extends CMysqlSchema
{
/**
* @var array the abstract column types mapped to physical column types.
*/
public $columnTypes=array(
'pk' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
'string' => 'varchar(255)',
'text' => 'text',
'integer' => 'int(11)',
'float' => 'float',
'decimal' => 'decimal',
'datetime' => 'datetime',
'timestamp' => 'timestamp',
'time' => 'time',
'date' => 'date',
'binary' => 'blob',
'boolean' => 'tinyint(1)',
'money' => 'decimal(19,4)',
// add your custom abstract column types here
'yn' => 'tinyint(1) UNSIGNED NOT NULL DEFAULT 1',
);
}
您需要连接才能使用此新驱动程序。修改您的数据库配置,如下所示。
'db'=>array(
// your initial db configuration here
'driverMap'=>array('mysql'=>'MyCustomMysqlSchema'),
),