【发布时间】:2015-10-15 17:55:08
【问题描述】:
我有一个产品数据库,其中包含一些具有 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 表中的所有数据。我已经像地狱一样在谷歌上搜索,研究了文档等等,我不确定我是否有可能实现我想要实现的目标。
这就是我定义我的(测试)模型的方式:
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。
【问题讨论】:
标签: node.js orm sequelize.js