什么是“正确”的方式来实现一个“平坦”的结果使用序列化N:M协会

我有一个产品数据库,其中包含一些具有1-n类别的产品。 我的产品存储在products表中,类别在categories ,关联存储在productCategoryRel 。 现在我的愿望是,当我使用Product.find()获取一个产品时,接收一个包含categories属性的结果,其中包含categories表中的数据,没有任何其他嵌套属性。

目前这是我到目前为止:

 { "id": 1, "title": "Testproduct", "categories": [ { "id": 1, "title": "Testcategory", "productCategoryRel": { "category_id": 1, "product_id": 1 } } ] } 

所以我的product包含一个很好的属性categories ,但categories也包含我想要避免的来自productCategoryRel表的所​​有数据。 我已经像地狱一样search,研究了文档和什么,我不确定是否甚至有可能实现我的目标。

这是我如何定义我的(testing)模型:

 let ProductCategoryRel = sequelize.define('productCategoryRel', {}); let Category = sequelize.define('category', { title: Sequelize.STRING }); let Product = sequelize.define('product', { title: Sequelize.STRING }, { defaultScope: { include: [{ model: Category }] } }); 

和协会:

 Product.belongsToMany(Category, { through: ProductCategoryRel, foreignKey: 'product_id', }); Category.belongsToMany(Product, { through: ProductCategoryRel, foreignKey: 'category_id', }); ProductCategoryRel.hasMany(Product, {foreignKey: 'id'}); ProductCategoryRel.hasMany(Category, {foreignKey: 'id'}); 

而我期望的结果就像下面这样简单:

 { "id": 1, "title": "Testproduct", "categories": [ { "id": 1, "title": "Testcategory" } ] } 

那么这甚至有可能吗? 我如何需要我改变我的关联? 我已经尝试了一些奇怪的hasMany / belongsTo组合,而没有成功。

我正在使用Sequelize 3.12.1。

尝试这样的事情(可能有一些错误,但如果你给我反馈,我们解决问题):

 Product.findOne({ where: { id: yourProductId }, include: [{ model : Category, order: [['id','desc']], through: {attributes: []} }], }) 

attributes属性允许你select要显示的数据。 它也可以用在包含的模型中。

更多文档http://docs.sequelizejs.com/en/latest/docs/querying/