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'));
}
}