我发现有两种方法可以在迁移文件中编写knex迁移。
exports.up = function (knex) {
return knex.schema
.createTableIfNotExists('foo', function (table) {
table.increments('id').unique();
table.string('foo1');
table.string('foo2');
})
.createTableIfNotExists('bar', function (table) {
table.increments('bar1');
table.string('bar2').index();
});
或
exports.up = function (knex) {
return Promise.all([
knex.schema.createTableIfNotExists('foo', function (table) {
table.increments('id').unique();
table.string('foo1');
table.string('foo2');
}),
knex.schema.createTableIfNotExists('bar', function (table) {
table.increments('bar1');
table.string('bar2').index();
})
]);
}
哪一个是正确的做法?
答案 0 :(得分:2)
这是添加knex脚本的正确方法,因为Promises是处理knex中查询的首选方式,因为它们允许您从履行处理程序返回值。
exports.up = function (knex) {
return Promise.all([
knex.schema.createTableIfNotExists('foo', function (table) {
table.increments('id').unique();
table.string('foo1');
table.string('foo2');
}),
knex.schema.createTableIfNotExists('bar', function (table) {
table.increments('bar1');
table.string('bar2').index();
})
]);
}
答案 1 :(得分:1)
Ricardo Graca在Knex's github issue page
回答在这种情况下,它没有什么区别。
如果您需要对进行一些更改,则只能使用基于Promise的 在另一个表中进行另一个更改之前的表。例如,如果 您需要从另一个表中引用某个表而不是 那些表尚未存在,您将创建第一个表(的表) 承诺中的并不依赖于任何东西),然后是承诺 解决了您将创建第二个表。这样你就可以确保 依赖关系得到满足。