我有三个表Articles
,Hubs
和Tags
。每个Articles
行条目可以具有Hubs
和Tags
的多个条目。每个Hub
行可以包含Tags
的多个条目(一对多的关系)。每个Articles
行都通过Hubs
表与Tags
和ArticlesJunction
相关(多对多关系)。
我的模型如下:
文章
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"
。可能是什么问题,我做错了什么?
我试图使Hubs
和Tags
表id
的键对于unique: true
来说是唯一的,然后一切正常,但是我不能添加作为将hub
和tag
放在ArticlesJunction
表中,事实证明这不是解决问题的正确方法。