связать существующие поля с методами класса sequelize

У меня есть две модели 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;
};

Мне нужно связать вылет и пункт назначения с идентификатором поля местоположения. Я не мог просто использовать has many / ownsto, поскольку он создает другое поле.

Я пробовал сделать Tickets_sold.departure.belongsTo (models.locations, {onDelete: "CASCADE", foreignKey: {allowNull: false}}), но это было бесполезно.

Как я могу связать два поля с таблицей местоположений?


person Sajak Upadhyaya    schedule 28.07.2016    source источник


Ответы (1)


Вам необходимо использовать свойство targetKey

Из документов:

Целевой ключ - это столбец целевой модели, на который указывает столбец внешнего ключа исходной модели. По умолчанию целевой ключ для отношения ownTo будет первичным ключом целевой модели. Чтобы определить настраиваемый столбец, используйте параметр targetKey.

Итак, в вашем случае вам нужно будет сделать что-то вроде:

tickets_sold.belongsTo( models.locations, { targetKey: 'departure' } );
tickets_sold.belongsTo( models.locations, { targetKey: 'destination' } );
person drinchev    schedule 30.07.2016