Fuelphp:将标准 ORM 模型转换为 model_temporal
Fuelphp: convert standard ORM model to model_temporal
使用 fuelphp,有没有办法修改现有的 \ORM\Model
以将其转换为 \ORM\Model_Temporal
?我开始研究创建迁移,这需要 1) 向我的 table 添加必要的列(不难); 2) 更新主键以将新列包含为复合主键的一部分(困难)。我遇到的问题是我在 DBUtil 中没有看到执行此操作的方法。
正确的做法是什么?
目前 DBUtil
不包括更改主键的方法,因为这样做的方法因数据库系统而异,而且 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'));
}
}
使用 fuelphp,有没有办法修改现有的 \ORM\Model
以将其转换为 \ORM\Model_Temporal
?我开始研究创建迁移,这需要 1) 向我的 table 添加必要的列(不难); 2) 更新主键以将新列包含为复合主键的一部分(困难)。我遇到的问题是我在 DBUtil 中没有看到执行此操作的方法。
正确的做法是什么?
目前 DBUtil
不包括更改主键的方法,因为这样做的方法因数据库系统而异,而且 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'));
}
}