Fuelphp:将标准ORM模型转换为model_temporal

时间:2015-05-19 18:29:13

标签: fuelphp fuelphp-orm

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

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

2 个答案:

答案 0 :(得分:1)

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

为此,您必须在迁移中手动构建查询,并使用DB::query()执行查询。

答案 1 :(得分: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'));
    }
}