Node.js 在sequelize中将模型集合用作数据类型

Node.js 在sequelize中将模型集合用作数据类型,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,背景: 这是一个产品数据库原型,每个产品可以有多个相关产品,每个关系都有一个类型,例如“附件”、“备件”、“相关”、“类似”等 技术 我们在节点上使用sequelize js来定义模型 模型代码段: 问题: 是否可以在Sequelize中将模型本身用作数据类型,以在另一个表中建立集合,例如: sequelize.define('ProductRelation', { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey

背景:

这是一个产品数据库原型,每个产品可以有多个相关产品,每个关系都有一个类型,例如“附件”、“备件”、“相关”、“类似”等

技术

我们在节点上使用sequelize js来定义模型

模型代码段:

问题:

是否可以在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' } );
注意:这些是概念示例,它们不起作用

如有任何建议或其他建模方法,我们将不胜感激


谢谢

看来,您想要的只是在产品之间建立n:m关系

唯一的方法是建立一个链接表或直通表。您可以手动执行此操作,也可以让Sequelize使用以下命令自动执行此操作:

db.Product.hasMany(db.Product, { through: 'RelatedProduct' } );
db.RelatedProduct.hasMany(db.Product, { through: 'RelatedProduct' } );
var RelatedProducts = sequelize.define('RelatedProducts', {
    // other columns here
});

Product.belongsToMany(Product, { through: RelatedProducts, foreignKey: 'relatedProductId' });
Product.belongsToMany(Product, { through: RelatedProducts });