我遇到以下关系的问题(请看下面的图片)。我不知道,如何在Sequelize中创建ArticleAbout
:(我已经创建了产品,品牌和文章模型。我现在该怎么办?
答案 0 :(得分:1)
取决于物品与品牌和产品的关系(我假设任何一篇文章可以指代多个产品和/或多个品牌)。 实现这一目标的最佳方法是建立从文章到产品和品牌的n:m关系。文档在这里更详细地解释了这一点: Sequelize Docs - Association#Scopes
所以,例如:
Article = sequelize.define('article', {
title: DataTypes.String,
text: DataTypes.TEXT
});
ArticleAbout = sequelize.define('article_about', {
about_id: {
type: DataTypes.INTEGER,
unique: 'about_article_ref'
},
about: {
type: DataTypes.STRING,
unique: 'about_article_ref',
},
reference_id: {
type: DataTypes.INTEGER,
unique: 'about_article_ref',
references: null
}
});
Brand.belongsToMany(Article, {
through: {
model: ArticleAbout,
unique: false.
scope: {
about: 'brand'
}
},
foreignKey: 'reference_id',
constraints: false
});
Product.belongsToMany(Article, {
through: {
model: ArticleAbout,
unique: false.
scope: {
about: 'product'
}
},
foreignKey: 'reference_id',
constraints: false
});
Article.belongsToMany(Brand, {
through: {
model: ArticleAbout,
unique: false
},
foreignKey: 'about_id'
});
Article.belongsToMany(Product, {
through: {
model: ArticleAbout,
unique: false
},
foreignKey: 'about_id'
});
关键部分为unique: 'string'
,through:
通过设置字符串的唯一性,您可以告诉Sequelize将该键组合为复合键的一部分,这意味着可以将多个对象与一个键相关联。 constraints: false
指示编译器停止对所有交叉引用外键尖叫。
设置through:
通过表格设置关系,就像您在正在使用的AboutArticle表中所描述的那样。
然后,您可以开始向产品和品牌添加文章:
product.addArticle(article);
brand.addArticle(article);
在哪个方面,查询表变得非常简单:
Article.getProducts();
Article.getBrands();
Product.getArticles();
Brand.getArticles();
希望有所帮助。