使用fuelphp,有没有办法修改现有的\ORM\Model
将其转换为\ORM\Model_Temporal
?我开始研究创建一个迁移,它需要1)将必要的列添加到我的表(不难); 2)更新主键以包含新列作为复合主键(困难)的一部分。我遇到的问题是我没有看到执行此操作的DBUtil中的方法。Fuelphp:将标准ORM模型转换为model_temporal
这样做的正确方法是什么?
使用fuelphp,有没有办法修改现有的\ORM\Model
将其转换为\ORM\Model_Temporal
?我开始研究创建一个迁移,它需要1)将必要的列添加到我的表(不难); 2)更新主键以包含新列作为复合主键(困难)的一部分。我遇到的问题是我没有看到执行此操作的DBUtil中的方法。Fuelphp:将标准ORM模型转换为model_temporal
这样做的正确方法是什么?
当前DBUtil
不包含更改主键的方法,因为这样做的方法在DB系统之间有所不同,而DBUtil
实际上并不知道您正在使用哪个DBMS。
为此,您需要在迁移过程中手动构建查询并使用DB::query()
来执行该查询。
如果其他人面临同样的任务,这就是我最终做的事情。我的数据库是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'));
}
}
感谢您指引我在正确的方向。 – tmpearce