2015-05-19 5 views
0

Используя топливную систему, существует ли способ изменить существующий \ORM\Model, чтобы преобразовать его в \ORM\Model_Temporal? Я начал изучать создание миграции, которая должна: 1) добавить необходимые столбцы в таблицу (не сложно); 2) обновить первичный ключ, чтобы включить новые столбцы в состав составного первичного ключа (сложный). Проблема, с которой я сталкиваюсь, заключается в том, что я не вижу метода в DBUtil, который выполняет эту операцию.Fuelphp: конвертировать стандартную модель ORM в model_temporal

Каков правильный способ сделать это?

ответ

1

В настоящее время DBUtil не включает в себя способ изменения первичных ключей, потому что способ этого отличается между системами БД и DBUtil, на самом деле не знает, какую СУБД вы используете.

Для этого вам нужно будет создать запрос вручную при переносе и использовать DB::query() для его выполнения.

+0

Спасибо, что указал мне в правильном направлении. – tmpearce

0

Если кто-то другой сталкивается с одной и той же задачей, вот что я в итоге сделал. Моя база данных - это MySQL, синтаксис, возможно, придется изменить, если вы используете другую СУБД. Мой первоначальный первичный ключ был автоинкрементным столбцом с именем 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')); 
    } 
} 
Смежные вопросы