javascript - 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');
}
};
代码分数:
解决方案
是的,你的外键实际上可能是一个 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"}
这将照顾你可能试图补偿的多对多
推荐阅读
- laravel - 带有 Laravel 问题的 Apache 别名
- android - Facebook 密钥哈希生成错误格式
- ios - 使用 Visual Studio + Cordova 的 Remotebuilderror(错误代码 65)
- xamarin - 将设备重新连接到 USB 后,Xamarin 构建非常缓慢
- database - 在 Oracle 中为特定用户设置新密码时需要旧密码
- post - 使用 POST 方法在 IFrame 中渲染 VueJs 页面
- php - 当用户再次登录 WooCommerce 时,从购物车中删除以前的项目
- c++ - 可变参数模板构造函数扩展中出现意外的 nullptr
- python - 如何使用 Python 从图像中裁剪椭圆区域
- python - 如何从数据框的子集中随机选择元素?