【问题标题】:duplicate foreign key column using sequelize使用 sequelize 复制外键列
【发布时间】:2015-09-30 15:46:30
【问题描述】:

我有一个使用sequelize的node项目,有以下两张表

"use strict";

module.exports = function(sequelize, DataTypes) {
  var asset = sequelize.define("asset", {
    description   : DataTypes.STRING,
    maker         : DataTypes.STRING,
    model         : DataTypes.STRING,
    serialNumber  : DataTypes.STRING,
    barcode       : DataTypes.STRING,
    account       : DataTypes.INTEGER,
    usefulLife    : DataTypes.INTEGER,
    downtimeCosts : DataTypes.FLOAT,
    purchasePrice : DataTypes.FLOAT
  }, {
    classMethods: {
      associate: function(models) {
        /*Un estado es de muchas categorias, y no se puede borrar si tiene un activo asociado*/
        asset.belongsTo(models.assetState, {
          onDelete: "RESTRICT",
          foreignKey: {
            allowNull : false,
            name      : 'assetState_id'
          }
        });
      }

    }
  });

  return asset;
};


"use strict";

module.exports = function(sequelize, DataTypes) {
  var assetState = sequelize.define("assetState", {
    state: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        assetState.hasMany(models.asset)
      }
    }
  });

  return assetState;
};

问题是,当我检查 postgres 中的资产表时,我有两列(“assetState_id”,“assetState”),我想这是因为我明确给出了关系的名称,因为我可以不生成“资产状态”列?

谢谢

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    您可以在assetState 表中声明一个主键,然后在关联定义中引用它:

    var assetState = sequelize.define("assetState", {
      assetState_id: { 
        type: Sequelize.INTEGER, 
        primaryKey: true, 
        autoIncrement: true
      }, 
      state: DataTypes.STRING
    }, {
      classMethods: {
        associate: function(models) {
          assetState.hasMany(models.asset, { foreignKey: 'assetState_id' })
        }
      }
    });
    

    【讨论】:

    • 你好,谢谢你的回答,我声明状态表中的主键改变了一点语法,@ 987654322@ 因为你的语法没有编译我,第二列坚持的区别只是名称assetStateAseetStateId
    • 我现在完全看到了问题所在。请参阅我的更新答案以了解如何解决此问题。
    猜你喜欢
    • 2015-05-14
    • 2021-02-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多