Knex.js忽略了外键约束



我正在尝试将Knex.js与express和Node.js.一起设置

我正在使用Knex.js.的SQLite3

目前我遇到的问题是,Knex使用表正确创建外键,但在插入时会忽略它们(在外部DB浏览器中,我可以看到外键已经设置好,在那里我也无法添加任何不存在的外键(。但我希望我不能用knex插入元组,不能满足外键约束。

以下是如何创建表格:

knex.schema.hasTable('User').then(res => {
if (res)
return;
knex.schema.createTable('User', function (table) {
table.increments('id').primary();
table.string('username').notNullable().unique();
}).then(res => {
console.log("Table User Created");
});
});
knex.schema.hasTable('Room').then(res => {
if (res)
return;
knex.schema.createTable('Room', function (table) {
table.increments('id').primary();
table.string('room_name').notNullable().unique();
table.integer('owner_id').unsigned().notNullable();
table.foreign('owner_id').references('User.id');
// table.foreign('owner_id').references('id').inTable('User'); //Not Working too
}).then(res => {
console.log("Table Room Created");
});
});

这里是测试数据的临时添加。

knex('user').insert({
username: 'f',
mail: 'f@f.de'
}).then(res => {
console.log(res);
});
knex('room').insert({
room_name: 'r',
owner_id: 2  // THIS SHOULD NOT WORK!!!
}).then(res => {
console.log(res);
});

我终于明白了:默认情况下,SQLite禁用了外键约束。

添加此项可解决问题

knex.raw("PRAGMA foreign_keys = ON;").then(() => {
console.log("Foreign Key Check activated.");
});

最新更新