Fuelphp: конвертировать стандартную модель ORM в model_temporal

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

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

2 ответа

Решение

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

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

В случае, если кто-то еще сталкивается с той же задачей, вот что я в итоге сделал. Моя база данных - 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'));
    }
}
Другие вопросы по тегам