0

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

我将 SQLite3 用于 Knex.js。

目前我遇到的问题是 Knex 使用表正确创建了外键,但在插入时只是忽略了它们(在外部数据库浏览器中,我可以看到外键已设置,并且我无法添加任何不存在的外键键)。但我希望我不能用 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);
});
4

1 回答 1

2

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

添加这个可以解决问题

knex.raw("PRAGMA foreign_keys = ON;").then(() => {
    console.log("Foreign Key Check activated.");
});
于 2020-12-24T07:53:10.403 回答