2017-01-31 11 views
1

knexを使用してMySql Dbの列のデータ型とデフォルト値を変更する必要があります。 その後、データ型が日付だったと日時にしても対応を実現するためにMySQLのクエリknex.jsを使用したMy Sql Alterテーブル

CURRENT_TIMESTAMP NULLから変更するために必要なデフォルト値が

の下に与えられていることを変更する必要が

コン:私は上記の変更を実行するためにknex移行ファイルを作成している

ALTER TABLE `Employees` 
CHANGE COLUMN `added_date` `added_date` DATETIME DEFAULT CURRENT_TIMESTAMP ; 

移行ファイルのテントは次のとおりです。

exports.up = function(knex, Promise) { 
return knex.schema.alterTable('Employee', function(t) { 
     t.dateTime('added_date').defaultTo(knex.fn.now());  
}); 
} ; 

exports.down = function(knex, Promise) { 
    return knex.schema.alterTable('Employee', function(t) { 
t.date('added_date').nullable();  
}); 
}; 

しかし、これは常にビルド中にエラーをスローします。テーブルEmployeeadded_date日時デフォルトのCURRENT_TIMESTAMP追加変化させるもの - ER_DUP_FIELDNAME:ER_DUP_FIELDNAME:重複する列名「added_date最新バージョン エラーを移行するには重複する列名「added_date」 エラーを - マイグレーションがエラーで失敗しました警告:

ようKnexある '

上記の変更を加えて誰でも正確な方法/構文をALTERテーブルに共有できますか?

+0

参考までにエラーを追加してください – davejal

答えて

4

raw()コールでこれを行う方法は現在ありません(knex 0.12.6)。将来、https://github.com/tgriesser/knex/pull/1759が完成すれば、より複雑な列変更機能が利用可能になります。

exports.up = function(knex, Promise) { 
    return knex.schema.raw('ALTER TABLE `Employees` CHANGE COLUMN `added_date` `added_date` DATETIME DEFAULT CURRENT_TIMESTAMP'); 
}; 

exports.down = function(knex, Promise) { 
    return knex.schema.raw('ALTER TABLE `Employees` CHANGE COLUMN `added_date` `added_date` DATE DEFAULT NULL'); 
}; 

編集:私はそのプルリクエストを仕上げを開始し、次のknex(0.12.7または0.13.0)のリリースに1が行うことができるようになります:

exports.up = function(knex, Promise) { 
    return knex.schema.alterTable('Employee', function(t) { 
    t.dateTime('added_date').defaultTo(knex.fn.now()).alter();  
    }); 
}; 

exports.down = function(knex, Promise) { 
    return knex.schema.alterTable('Employee', function(t) { 
    t.date('added_date').nullable().alter();  
    }); 
}; 

私にも、これらを追加しますそれらが機能することを確認するための統合テスト。

関連する問題