鉴于我有一个像这样的Knex.js脚本:
exports.up = function(knex, Promise) {
return knex.schema.createTable('persons', function(table) {
table.increments('id').primary();
table.string('name').notNullable();
});
};
目前正在创建一个表格。
如何将后续插入语句添加到此脚本?
我想要做的是添加像这样(或类似)的行:
knex.insert({id: 1, name: 'Test'}).into('persons')
我不确定我理解这种基于承诺的方法是如何运作的。我应该用insert语句编写另一个脚本吗?或者我可以以某种方式将它们附加到我现有的脚本中吗?
不幸的是,我在Knex.js文档中找不到任何完整的create + insert示例。
答案 0 :(得分:18)
为什么不使用Promise then 方法,例如:
Occurrence
答案 1 :(得分:1)
then 方法返回一个 Promise,您可以在创建表后使用它来实现插入。例如:
exports.up = (knex) => {
return knex.schema
.createTable("payment_paypal_status", (table) => {
table.increments()
table.string("name")
table.string("description")
})
.then(() =>
knex("payment_paypal_status").insert([
{name: "A", description: "A"},
{name: "B", description: "BB"},
{name: "C", description: "CCC"},
{name: "D", description: "DDDD"},
])
)
}
exports.down = (knex) => {
return knex.schema.dropTableIfExists("payment_paypal_status")
}
<块引用>
由于 .createTableIfNotExists 实际上只是生成简单的“CREATE TABLE IF NOT EXIST...”查询,如果之后为列生成任何更改表查询,它将无法正常工作。为了不破坏旧的迁移,此功能暂时未受影响,但不应在编写新代码时使用它,并且已从文档中删除。
我使用了 Fareed Alnamrouti 示例/代码并按照建议丢弃了 Jonny Rathbone 的 Promise.All