首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sequelize Migrations:向同一个表上的列添加外键约束

Sequelize Migrations:向同一个表上的列添加外键约束
EN

Stack Overflow用户
提问于 2019-02-27 06:22:55
回答 4查看 10K关注 0票数 5

因此,我尝试在迁移文件中创建一个对自身具有外键约束的表。

我尝试了遵循sequelize docs的方法,下面是我尝试过的代码,我还尝试将外键引用移到定义属性的位置,但在那里也不起作用。有没有办法在这里做我想做的事?

代码语言:javascript
运行
复制
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('comments', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      root_id: {
        defaultValue: null,
        type: Sequelize.INTEGER
      },
      parent_id: {
        defaultValue: null,
        type: Sequelize.INTEGER
      },
    }).then(() => queryInterface.addConstraint(
      'comments',
      ['root_id'],
      {
        type: 'foreign key',
        name: 'root_id_fk',
        references: {
          table: 'comments',
          field: 'root_id'
        },
        onDelete: 'cascade',
        onUpdate: 'cascade'
      }
    )).then(() => queryInterface.addConstraint(
      'comments',
      ['parent_id'],
      {
        type: 'foreign key',
        name: 'parent_id_fk',
        references: {
          table: 'comments',
          field: 'parent_id'
        },
        onDelete: 'cascade',
        onUpdate: 'cascade'
      }
    ))
  },
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-27 07:29:25

我找出了我做错了什么,我试图创建一个外键来引用同一个表上的自身,而我应该引用一个不同的列。哇!

票数 1
EN

Stack Overflow用户

发布于 2021-01-26 23:09:44

Shashikant Pandit的答案是好的,但它不是跨数据库兼容的。

我在使用该迁移时遇到了一个问题,因为我有一个PostgreSQL作为主DB,一个内存中的SQLite数据库用于我的测试。在测试环境中运行迁移(测试从空白数据库开始,然后运行迁移以获取当前数据库)在SQLite中产生错误。

这是一个使用Sequelizes addConstraint内置的版本,应该是跨数据库兼容的。

代码语言:javascript
运行
复制
module.exports = {
  up: (queryInterface, Sequelize) => queryInterface
    .addConstraint('app_users', {
      type: 'UNIQUE',
      fields: ['email', 'column2', 'column3'],
      name: 'unique_user_email',
    }),
  down: (queryInterface, Sequelize) => queryInterface
    .removeConstraint('app_users', 'unique_user_email'),
};
票数 4
EN

Stack Overflow用户

发布于 2020-05-28 14:54:49

对于任何正在寻找如何添加外键的答案的人,请使用此Sequelize Constraints

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54895133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档