使用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