migration failed with error: table.integer(...).references(...).on(...).OnDelete is not a function Knex.js postgres

migration failed with error: table.integer(...).references(...).on(...).OnDelete is not a function Knex.js postgres

我知道我有 postgres 工作,我在 knexfile.js 中有用户名和密码以及数据库名称。 psql 也是 运行ning。我遇到的问题 我在尝试使用我的 table 中的一个 运行 此命令时遇到问题。我尝试了很多不同的步骤,比如添加 table 而不是 on (我读到它是一个别名。我尝试了 foreign() 而不是 integer() 但没有任何进展。请帮忙或者指出一个缺陷据我所知。谢谢

knex migrate:latest

我收到这个错误

 Using environment: development 

 migration failed with error: table.string(...).references(...).on(...).OnDelete is not a function

migration file "20200525002912_personal_todos.js" failed    

    TypeError: table.integer(...).references(...).on(...).OnDelete is not a function
        at TableBuilder._fn (/home/misterjoe/personal_projects/group-note-todo-api/db/migrations/20200525002912_personal_todos.js:5:59)

这是我的 personal_todos.js 文件迁移

exports.up = function(knex) {
  return knex.schema.createTable('personal_todos', (table)=>{
    table.increments('id')
    table.integer('user_id').references('id').on('users').OnDelete('CASCADE');
    table.boolean('active').notNullable();
    table.string('start_time')
    table.string('end_time')
    table.string('header')
    table.string('body')
    table.integer('container_index').notNullable()
    table.integer('container_item_index').notNullable()
    table.timestamps(true,true);
    table.boolean('private')
  })
};

exports.down = function(knex) {
  return knex.schema.dropTableIfExists('personal_todos')
};

还有我的users.jstable

exports.up = function(knex) {
  return knex.schema.createTable('users', (table)=>{
      table.increments('id');
      table.string('first-name');
      table.string('last-name');
      table.string('username');
      table.string('email');
      table.string('password');
      table.integer('age');
      table.string('bio');
      table.string('gender');
      table.string('personalsecret1');
      table.string('personalsecret2');
      table.string('personalsecret3');
      table.string('colorScheme');
      table.binary('img');
      table.timestamps(true,true);
      table.boolean('payed');
      table.boolean('active');
      table.boolean('friends_can_see_private');
  })
};

exports.down = function(knex) {
  return knex.schema.dropTableIfExists('users')
};

我最终通过删除 onDelete() 并将其添加回 运行ning knex migrate:latest 来修复它。我添加了更多代码,然后它就可以工作了。

代码如下,希望对你有帮助,步骤如下

  1. 删除 onDelete() 运行 migrate:latest
  2. 添加无符号()。 onDelete('CASCADE') 我也添加了 onUpdate('CASCADE')

然后 运行 膝盖 migrate:latest