首页 > 解决方案 > Sequelize 和 Postgres - 无法实现外键约束“...”

问题描述

我正在尝试将两个外键添加到我的事务表中,其中一个可以正常工作,但第二个无法实现。有没有办法设置外键数组?我想问题是数组,因为它是唯一不同的东西。

'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');
  }
};

代码分数:

标签: javascriptnode.jspostgresqlsequelize.jssequelize-cli

解决方案


是的,你的外键实际上可能是一个 VARCHAR 或一个 BIGINT 或类似的东西......它可能会窒息而死......你的模型最终会得到一个 hasMany 关系或处理你可能拥有的事实的东西许多产品通过某种形式的连接表与交易相关联....所以您的表可能类似于 transaction、product、transaction_product 并具有已建立的关系

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

你的产品模型可能有类似的东西

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

这将照顾你可能试图补偿的多对多


推荐阅读