2015-05-19 33 views
0

使用fuelphp,有没有办法修改现有的\ORM\Model将其转换为\ORM\Model_Temporal?我开始研究创建一个迁移,它需要1)将必要的列添加到我的表(不难); 2)更新主键以包含新列作为复合主键(困难)的一部分。我遇到的问题是我没有看到执行此操作的DBUtil中的方法。Fuelphp:将标准ORM模型转换为model_temporal

这样做的正确方法是什么?

回答

1

当前DBUtil不包含更改主键的方法,因为这样做的方法在DB系统之间有所不同,而DBUtil实际上并不知道您正在使用哪个DBMS。

为此,您需要在迁移过程中手动构建查询并使用DB::query()来执行该查询。

+0

感谢您指引我在正确的方向。 – tmpearce

0

如果其他人面临同样的任务,这就是我最终做的事情。我的数据库是MySQL,如果您使用不同的DBMS,则可能必须更改语法。我的原始主键是一个名为id的自动递增列。

class Modify_TableName_To_Temporal 
{ 
    public function up() 
    { 
     \DBUtil::add_fields('tablename',array(
      'temporal_start'=>array('constraint'=>11, 'type'=>'int','default'=>0), 
      'temporal_end'=>array('constraint'=>11, 'type'=>'int','default'=>2147483647), 
     )); 
     \DB::query('ALTER TABLE tablename MODIFY id int, DROP PRIMARY KEY')->execute(); 
     \DB::query('ALTER TABLE tablename ADD PRIMARY KEY (id, temporal_start, temporal_end), MODIFY id int auto_increment')->execute(); 
    } 

    public function down() 
    { 
     \DB::query('ALTER TABLE tablename MODIFY id int, DROP CONSTRAINT primary')->execute(); 
     \DB::query('ALTER TABLE tablename ADD PRIMARY KEY (id), MODIFY id int auto_increment')->execute(); 
     \DBUtil::drop_fields('tablename',array('temporal_start','temporal_end')); 
    } 
}