2016-04-05 150 views
1

我发现有两种方法可以在迁移文件中编写knex迁移。创建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(); 
     }) 
    ]); 
} 

哪一个是做的正确方法吗?

回答

1

Knex's github issue page

回答Ricardo Graca在这种情况下,它不会有所作为。

你只使用基于承诺之一,如果你需要在 在做另一个表中的另一个改变之前的表中的一些变化。例如,如果 你需要从另一个表,并没有一个 还不存在这些表引用某个表,您将创建第一个表(即 不依赖于任何一个)在承诺,然后当这个承诺 解决你会创建第二个表。这样你就可以确保满足相关性。

1

这是添加knex脚本以正确的方式,如承诺与查询在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(); 
    }) 
]); 
}