使用SequelizeJS使用外键编写迁移 [英] Writing Migrations with Foreign Keys Using SequelizeJS

查看:21
本文介绍了使用SequelizeJS使用外键编写迁移的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

背景

我正在使用SequelizeJS构建一个项目,SequelizeJS是一种流行的NodeJS ORM。在设计架构时,似乎有两种策略:

  1. 创建模型代码并使用.sync()函数自动为您的模型生成表。
  2. 创建模型代码并使用QueryInterfaceumzug编写manual migrations

我的理解是,#1更适合快速原型制作,但#2是预期会随时间发展的项目的最佳实践,并且生产数据需要能够经受住迁移。

此问题与策略2有关。

问题

我的表具有必须通过外键反映的关系。

  • 如何通过Sequelize QueryInterface创建彼此具有外键关系的表?

  • 序列化需要哪些列和帮助器表?例如,似乎需要特定的列,如createdAt或updatedAt。

推荐答案

如何通过Sequelize QueryInterface创建彼此具有外键关系的表?

.createTable()方法接受列的字典。您可以查看documentation for .define()中的有效属性列表,特别是通过查看params表中的[attributes.column.*]行。

若要创建具有外键关系的属性,请使用&Quot;References&Quot;和&Quot;ReferencesKey&Quot;字段:

例如,下面将创建一个users表和一个引用USERS表的user_emails表。

queryInterface.createTable('users', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  }
}).then(function() {
  queryInterface.createTable('user_emails', {
    userId: {
      type: Sequelize.INTEGER,
      references: { model: 'users', key: 'id' }
    }
  })
});

序列化需要哪些列和帮助器表?例如,似乎需要特定的列,如createdAt或updatedAt。

标准模型似乎预期每个表有一个idupdatedAtcreatedAt列。

queryInterface.createTable('users', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  createdAt: {
    type: Sequelize.DATE
  },
  updatedAt: {
    type: Sequelize.DATE
  }
}

如果在模型上设置paranoid to true,还需要deletedAt时间戳。

这篇关于使用SequelizeJS使用外键编写迁移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆