考虑到我有这样一个Knex.js脚本:
exports.up = function(knex, Promise) {
return knex.schema.createTable('persons', function(table) {
table.increments('id').primary();
table.string('name').notNullable();
});
};它当前创建一个表。
如何将后续的insert语句添加到此脚本?
我想要做的是添加这样的一行(或类似的):
knex.insert({id: 1, name: 'Test'}).into('persons')我不太明白这种基于承诺的方法是如何运作的。我应该用insert语句编写另一个脚本吗?或者我可以将它们附加到我现有的脚本中吗?
不幸的是,我没有在Knex.js文档中找到任何完整的create + insert示例。
发布于 2016-02-12 06:44:33
然后方法返回一个允诺,您可以使用它在创建表后实现插入。例如:
exports.up = function (knex, Promise) {
return Promise.all([
knex.schema.createTableIfNotExists("payment_paypal_status", function (table) {
table.increments(); // integer id
// name
table.string('name');
//description
table.string('description');
}).then(function () {
return knex("payment_paypal_status").insert([
{name: "A", description: "A"},
{name: "B", description: "BB"},
{name: "C", description: "CCC"},
{name: "D", description: "DDDD"}
]);
}
),
]);
};
exports.down = function (knex, Promise) {
return Promise.all([
knex.schema.dropTableIfExists("payment_paypal_status")
]);
};发布于 2021-07-27 20:42:48
然后的方法返回一个允诺,您可以使用它在创建表之后实现插入。例如:
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实际上只是生成普通的“创建表,如果不存在.”查询--如果之后为列生成任何afterwards查询,它将无法正常工作。为了不中断旧的迁移,这个函数暂时保持不变,但是在编写新代码时不应该使用它,并且从文档中删除它。
发布于 2022-02-07 14:35:53
使用现代Javascript的await/async关键字,您可以这样做:
exports.up = async function(knex) {
await knex.schema.createTable('persons', function(table) {
table.increments('id').primary();
table.string('name').notNullable();
});
// You could replace "return" by "await" here if you wish.
return knex.insert({id: 1, name: 'Test'}).into('persons');
};这基本上是一样的,除了使用await/async而不是then。
https://stackoverflow.com/questions/35089571
复制相似问题