2015-05-19 40 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')); 
    } 
}