Sequelize и Postgres - ограничение внешнего ключа "..." не может быть реализовано - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь добавить два внешних ключа в свою таблицу транзакций, один из которых работает нормально, но второй не может быть реализован. Есть ли способ установить массив внешних ключей? Я предполагаю, что проблема в массиве, поскольку он отличается только от одного.

'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
      return queryInterface.createTable('transactions', { 
        id: 
        {
             type: Sequelize.INTEGER,
             primaryKey: true,
             autoIncrement: true,
             allowNull: false,
        },
        value:
        {
          type: Sequelize.FLOAT,
          allowNull: false,
        },
        clientId:
        {
          type: Sequelize.INTEGER,
          allowNull: true,
          references: { model: 'client', key: 'id'},
          onUpdate: 'CASCADE',
          onDelete: 'CASCADE'
        },
        productId:
        {
          type: Sequelize.ARRAY(Sequelize.INTEGER),
          allowNull: false,
          references: { model: 'products', key: 'id'},
          onUpdate: 'CASCADE',
          onDelete: 'CASCADE'
        },
        createdAt:
        {
          type: Sequelize.DATE,
          allowNull: false,
        },
        updatedAt: 
        {
          type: Sequelize.DATE,
          allowNull: false,
        }
      });
  },

  down: (queryInterface, Sequelize) => {
      return queryInterface.dropTable('transactions');
  }
};

Фракция кода:

1 Ответ

0 голосов
/ 07 января 2020

Да, ваш внешний ключ, вероятно, на самом деле VARCHAR или BIGINT или что-то в этом роде ... Вероятно, он задыхается до смерти ... ваша модель в конечном итоге будет иметь отношение hasMany или что-то, что обрабатывает тот факт, что у вас может быть много продуктов, связанных с транзакцией через какую-то таблицу соединений .... так что ваши таблицы могут быть чем-то вроде транзакции, продукта, транзакции_продукта с установленными отношениями

transaction.hasMany(product, {as: "Products", through: "transaction_product", foreignKey: "transaction_id"}

и модель вашего продукта может иметь что-то вроде

product.belongsToMany(transaction, {as: "Transactions", through: "transaction_product", foreignKey: "product_id"}

, и это позаботится о многих со многими, которых вы, вероятно, пытаетесь компенсировать

...