1

我有从 CLI 生成的这两个 Sequelize 模型

'use strict';
module.exports = function(sequelize, DataTypes) {
  var ticket_sold = sequelize.define('ticket_sold', {
    ticket_id: DataTypes.INTEGER,
    bus_id: DataTypes.INTEGER,
    departure: DataTypes.INTEGER,
    destination: DataTypes.INTEGER,
    passenger_id: DataTypes.INTEGER,
    amount: DataTypes.FLOAT,
    status: DataTypes.BOOLEAN,
    is_deleted: DataTypes.BOOLEAN
  }, {
    classMethods: {
      associate: function(models) {
        
      }
    }
  });
  return ticket_sold;
};

'use strict';
module.exports = function(sequelize, DataTypes) {
  var locations = sequelize.define('locations', {
    name: DataTypes.STRING,
    status: DataTypes.BOOLEAN,
    is_deleted: DataTypes.BOOLEAN
  }, {
    classMethods: {
      associate: function(models) {
        
      }
    }
  });
  return locations;
};

我需要将 Departure 和 Destination 与 location 字段的 Id 相关联。我不能只使用 has many/belongsto,因为它会创建另一个字段。

我试过做tickets_sold.departure.belongsTo(models.locations,{ onDelete:"CASCADE", foreignKey:{allowNull:false } }) 但没有用。

如何将这两个字段与位置表相关联?

4

1 回答 1

0

您需要使用该targetKey属性

从文档:

目标键是源模型上的外键列指向的目标模型上的列。默认情况下,belongsTo 关系的目标键将是目标模型的主键。要定义自定义列,请使用 targetKey 选项。

因此,在您的情况下,您需要执行以下操作:

tickets_sold.belongsTo( models.locations, { targetKey: 'departure' } );
tickets_sold.belongsTo( models.locations, { targetKey: 'destination' } );
于 2016-07-30T10:49:50.203 回答