序列化:这里没有唯一约束错误

时间:2020-05-11 10:57:50

标签: node.js postgresql orm sequelize.js

我有三个表ArticlesHubsTags。每个Articles行条目可以具有HubsTags的多个条目。每个Hub行可以包含Tags的多个条目(一对多的关系)。每个Articles行都通过Hubs表与TagsArticlesJunction相关(多对多关系)。

我的模型如下:

文章

sequelize.define('Articles', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    title: {
        type: DataTypes.TEXT,
        allowNull: false
    }
    }, {
        freezeTableName: true,
        tableName: 'Articles',
    }
)

集线器

sequelize.define('Hub', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: {
        type: DataTypes.TEXT,
        primaryKey: true,
        allowNull: false
    },
    }, {
        freezeTableName: true,
        tableName: 'Hubs',
    })

标签

sequelize.define('Tag', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: {
        type: DataTypes.TEXT,
        primaryKey: true,
        allowNull: false
    },
    hub: {
        type: DataTypes.INTEGER,
        allowNull: false
    }
    }, {
        freezeTableName: true,
        tableName: 'Tags',
    })

ArticlesJunction

sequelize.define('ArticlesJunction', {
        id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        article: {
            type: DataTypes.INTEGER,
            primaryKey: false,
            allowNull: false,
            references: {
                model: Articles,
                key: 'id'
            }
        },
        hub: {
            type: DataTypes.INTEGER,
            primaryKey: false,
            allowNull: false,
            references: {
                model: Hubs,
                key: 'id'
            }
        },
        tag: {
            type: DataTypes.INTEGER,
            primaryKey: false,
            allowNull: false,
            references: {
                model: Tags,
                key: 'id'
            }
        }
    }, {
        tableName: 'ArticleJunction',
        timestamps: false,
        underscored: true
    })

表之间的关联设置如下

// Relation Hubs -> Tags (one of many)
Hubs.hasMany(Tags, {
    foreignKey: 'tag'
})
Tags.belongsTo(Hubs)

// Relation Articles <-> Hubs, Tags (many to many)
ArticlesJunction.belongsTo(Articles, {
    foreignKey: 'article'
})

ArticlesJunction.belongsTo(Hubs, {
    foreignKey: 'hub'
})

ArticlesJunction.belongsTo(Tags, {
    foreignKey: 'tag'
})

Articles.belongsToMany(Hubs, {
    through: ArticlesJunction,
    foreignKey: 'article'
})

Articles.belongsToMany(Tags, {
    through: ArticlesJunction,
    foreignKey: 'article'
})

Hubs.belongsToMany(Articles, {
    through: ArticlesJunction,
    foreignKey: 'hub'
})

Tags.belongsToMany(Articles, {
    through: ArticlesJunction,
    foreignKey: 'tag'
})

不幸的是,同步模型时发生以下错误:SequelizeDatabaseError: there is no unique constraint matching given keys for referenced table "Hubs"。可能是什么问题,我做错了什么?

我试图使HubsTagsid的键对于unique: true来说是唯一的,然后一切正常,但是我不能添加作为将hubtag放在ArticlesJunction表中,事实证明这不是解决问题的正确方法。

0 个答案:

没有答案
相关问题