我有一個產品數據庫,其中包含一些具有1-n類別的產品。我的產品存儲在products
表中,類別在categories
中,關聯存儲在productCategoryRel
中。現在我的願望是,當我獲得使用Product.find()
的產品時,將收到包含categories
屬性的結果,其中包含categories
表中的數據,而沒有任何其他嵌套屬性。使用sequelize N:M關聯實現「平坦」結果的「正確」方式是什麼
目前這是我得到迄今:
{
"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。
我想避免,如果可能的,因爲我會明確地排除每一個酒店的每這聽起來相當多的冗餘範圍(即使在情況下,新的我加一些到模型) /高架。 //編輯:順便說一下:屬性只能用於包含模型(我的例子中的類別)中指定的列而非關係。我仍然看到'productCategoryRel' –
我創建了一個小的要點:https://gist.github.com/manuelbieh/fe54125023d5dc5be1b2 –
我已經更新我的代碼片段。我添加'''通過:{attributes:[]}''''應該從輸出中刪除'''ProductCategoryRel''' –