【问题标题】:Sequelize and Postgres - foreign key constraint "..." cannot be implementedSequelize 和 Postgres - 无法实现外键约束“...”
【发布时间】:2020-04-24 22:35:48
【问题描述】:

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

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

代码分数:

【问题讨论】:

  • 我认为您不需要Array 类型的外键,如果您的表关系构造正确,您也可以共享其他模型模式吗?给你一个正确的答案会很有帮助。

标签: javascript node.js postgresql sequelize.js sequelize-cli


【解决方案1】:

是的,你的外键实际上可能是一个 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"}

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

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多