Sequelize 和 Postgres - 外键约束“...”无法实现
Sequelize and Postgres - foreign key constraint "..." cannot be implemented
我正在尝试将两个外键添加到我的事务中 table,其中一个可以正常工作,但第二个无法实现。
有没有办法设置外键数组?我想问题出在数组上,因为它是唯一不同的东西。
'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');
}
};
代码分数:
是的,您的外键实际上可能是 VARCHAR 或 BIGINT 或类似的东西...它可能会窒息而死...您的模型最终将具有 hasMany 关系或处理事实上,您可能通过某种类型的连接 table 将许多产品与交易相关联....因此您的 table 可能类似于交易、产品,transaction_product 具有已建立的关系
transaction.hasMany(product, {as: "Products", through: "transaction_product", foreignKey: "transaction_id"}
并且您的产品型号可能类似于
product.belongsToMany(transaction, {as: "Transactions", through: "transaction_product", foreignKey: "product_id"}
这将解决您可能试图弥补的许多问题
我正在尝试将两个外键添加到我的事务中 table,其中一个可以正常工作,但第二个无法实现。 有没有办法设置外键数组?我想问题出在数组上,因为它是唯一不同的东西。
'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');
}
};
代码分数:
是的,您的外键实际上可能是 VARCHAR 或 BIGINT 或类似的东西...它可能会窒息而死...您的模型最终将具有 hasMany 关系或处理事实上,您可能通过某种类型的连接 table 将许多产品与交易相关联....因此您的 table 可能类似于交易、产品,transaction_product 具有已建立的关系
transaction.hasMany(product, {as: "Products", through: "transaction_product", foreignKey: "transaction_id"}
并且您的产品型号可能类似于
product.belongsToMany(transaction, {as: "Transactions", through: "transaction_product", foreignKey: "product_id"}
这将解决您可能试图弥补的许多问题