javascript - 在 sequelize node.js 中添加关联与添加自定义外键列

标签 javascript node.js sequelize.js

我正在学习 node jssequelize 并且在场景中感到困惑。
首先看看我定义的模型。

class Car extends Sequelize.Model {
static init(sequelize, DataTypes) {
    return super.init({
      id: {
        allowNull: false,
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true,  
       },
        name:{ 
        type: DataTypes.STRING(20),
        defaultValue:''
       },
        //CASE 1 == can define custom foreign column like this
        company_id: {
            type: Sequelize.INTEGER,
            references: {
                   model: 'Company',
                  key: 'id',
               },
           allowNull: false,
      },  

      },
      {
       sequelize,
       tableName: 'Car'
      }
    );
  }


  //CASE 2 == can define association like this
  static associate(models) {
      this.myAssociation = this.belongsTo(models.Company);

  }

}


当我遵循案例 1 时,这会在 car 表中添加为一列,当我运行案例 2 时,会在表中自动添加一列 ComapanyId。但是,如果我同时运行案例 1 和案例 2,则会创建两列。一个是自定义的,一个是自定义的由协会创建。但我很困惑,这是在两个表之间添加外键约束的正确方法。请让我的概念清楚。
谢谢。

最佳答案

您可以在关联定义中指明哪个字段将用作外键:

this.myAssociation = this.belongsTo(models.Company, { foreignKey: 'company_id' });

如果您不使用 sync 方法为模型自动创建表,则 CASE 1 用于迁移,指示外键的另一侧,CASE 2 将在您创建/读取/更新时使用关联模型/通过 Sequelize 模型删除数据库中的记录。

关于javascript - 在 sequelize node.js 中添加关联与添加自定义外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61025356/

相关文章:

javascript - SvelteKit:如何使用内联的 JS 和 CSS 将构建输出为单个 HTML 文件?

javascript - [function].apply() 在 IE 中导致 "JScript object expected"错误

node.js - Stripe webhook 错误 : No signatures found matching the expected signature for payload

javascript - Node.js:系统发送两次 POST 请求

javascript - JS : show textarea field on input change

javascript - 使表单动态化?

node.js - 在从客户端到 Node 上的服务器的断开连接事件上发出数据

node.js - 改进 Node.js 代码(sequelize、promise 和 Passport)

typescript 提示解构类型

sequelize.js - Sequelize : sort by enum cases