Knex.js 忽略的外键约束

时间:2020-12-23 12:00:36

标签: node.js knex.js node-sqlite3 knexjs

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

我在 Knex.js 中使用 SQLite3。

目前我遇到的问题是 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);
});

0 个答案:

没有答案