我有一个产品数据库,其中包含一些具有1-n类别的产品。我的产品存储在products
表中,类别位于categories
中,关联存储在productCategoryRel
中。现在我的愿望是,当我使用Product.find()
获取产品时,接收包含categories
属性的结果,其中包含来自categories
表的数据,而没有任何其他嵌套属性。< / p>
目前这是我到目前为止所得到的:
{
"id": 1,
"title": "Testproduct",
"categories": [
{
"id": 1,
"title": "Testcategory",
"productCategoryRel": {
"category_id": 1,
"product_id": 1
}
}
]
}
因此我的product
包含一个很好的属性categories
,但categories
还包含productCategoryRel
表中我想要避免的所有数据。我已经谷歌搜索过地狱,研究了文档和诸如此类的东西,我不确定它是否有可能实现我想要的目标。
这是我定义我的(测试)模型的方式:
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。
答案 0 :(得分:1)
尝试这样的事情(可能会有一些错误,但如果你给我反馈,我们会解决问题):
Product.findOne({
where: {
id: yourProductId
},
include: [{
model : Category,
order: [['id','desc']],
through: {attributes: []}
}],
})
attributes
属性允许您选择要显示的数据。它也可以用在包含的模型中。