字符串为Sequelize / Postgres外键时出错

时间:2015-04-15 04:53:21

标签: postgresql sequelize.js

我在电表和电表读数之间建立关系。似乎有一个错误,Postgres / Sequelize期望外键是INTEGER类型。我喜欢修理它。

模型

  var Station = sequelize.define('Station', {
    id: {
          type: DataTypes.INTEGER,
          autoIncrement: true,
          primaryKey: true
      }, 
    kin: DataTypes.STRING,
    // other columns

  var EKMreading = sequelize.define('EKMreading', {
    id: {
          type: DataTypes.INTEGER,
          autoIncrement: true,
          primaryKey: true
      }, 
    "Meter": DataTypes.STRING,
    // other columns

协会

EKMreading.belongsTo( Station, { as: 'KIN', foreignKey: 'kin'});
Station.hasMany( EKMreading, { as: { singular: 'reading', plural: 'readings'} } );

破码

EKMreading.create({ data blah, blah })
    .then(function( reading ) {
        Station.find({where: {ekmOmnimeterSerial: reading.Meter}})
            .then(function( station ) {
                reading.setKIN( station.kin ); // breaks stuff, see below
                station.addReading( reading )
                  .then(function() {
                    console.log('Made relationship.');
                  });
             });
          });

错误(摘要)

Error setting reading on Station. { [SequelizeDatabaseError: invalid input syntax for integer: "007-0020-001-04-K"]

1 个答案:

答案 0 :(得分:0)

始终是简单的东西

基于这个错误,我认为我有一个问题,我给出了一个字符串的主键,但它需要一个整数。

真正的问题是你必须将整个实例传递给setter:

// before
reading.setKIN( station.kin ); 

// after
reading.setKIN( station );

setter将自动从工作站获取主键并将其指定为读取中的外键。

仍然未知

如何将外键设置为与另一个表的主键不同?例如,如何使读数上的外键对应于Station的KIN而不是其自动增量ID?