关联类方法sequelize中的现有字段

时间:2016-07-28 17:10:07

标签: node.js orm sequelize.js sequelize-cli

我有两个从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;
};




我需要将出发地和目的地与位置字段的ID相关联。我不能只使用has many / belongssto,因为它会创建另一个字段。

我试过了 tickets_sold.departure.belongsTo(models.locations,{           onDelete:" CASCADE&#34 ;,           外键:{             允许为空:假           }         }) 但这没用。

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

1 个答案:

答案 0 :(得分:0)

您需要使用targetKey property

来自文档:

  

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

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

teams
-------
id (int, primary)
name (varchar[255])

games
-------
id (int, primary)
home_team (int - references `id` on `teams`)
away_team (int - references `id` on `teams`)
date (datetime)
home_score (int)
away_score(int)