背景:
这是针对产品数据库原型,每个产品可以有多个相关产品,并且每个关系都有一个类型,例如: '配件','备件','与','类似于'等。
技术
我们在节点上使用sequelize js来定义模型。
模型片段:
sequelize.define('Product', {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
name: { type: DataTypes.STRING, allowNull: false, comment: 'product name'}
...
});
sequelize.define('ProductRelationType', {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
name: { type: DataTypes.STRING, allowNull: false, comment: 'relationship type description' }
});
sequelize.sync({force: false}).then( function() {
...
});
问题
是否可以在Sequelize中使用模型本身作为数据类型,以在另一个表中建立集合,例如:
sequelize.define('ProductRelation', {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
relatedProduct: { type: Product } //reference to product model
});
然后是:
Product.hasMany(ProductRelation, { as: 'relatedProducts' });
ProductRelation.hasOne(ProductRelationType, { as: 'RelationType' } );
或者,排除ProductRelation表定义,并使用:
db.Product.hasMany(db.Product, { through: 'RelatedProduct' } );
db.RelatedProduct.hasMany(db.Product, { through: 'RelatedProduct' } );
注意:这些是概念示例,它们不起作用。
赞赏任何建议或替代建模方法。
谢谢
答案 0 :(得分:0)
看来,您想要的只是建立从Product
到Product
的n:m关系。
实现目标的唯一方法是建立一个link-(或“through-”)表。您可以手动执行此操作,也可以Sequelize
使用belongsToMany自动执行此操作:
var RelatedProducts = sequelize.define('RelatedProducts', {
// other columns here
});
Product.belongsToMany(Product, { through: RelatedProducts, foreignKey: 'relatedProductId' });
Product.belongsToMany(Product, { through: RelatedProducts });