2015-10-15 18 views
1

我有一個產品數據庫,其中包含一些具有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。

回答

1

嘗試是這樣的(可能會有一些錯誤,但如果你給我的反饋,我們解決問題):

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

attributes屬性允許你選擇什麼樣的數據顯示。它也可用於包含的模型。

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

+0

我想避免,如果可能的,因爲我會明確地排除每一個酒店的每這聽起來相當多的冗餘範圍(即使在情況下,新的我加一些到模型) /高架。 //編輯:順便說一下:屬性只能用於包含模型(我的例子中的類別)中指定的列而非關係。我仍然看到'productCategoryRel' –

+0

我創建了一個小的要點:https://gist.github.com/manuelbieh/fe54125023d5dc5be1b2 –

+0

我已經更新我的代碼片段。我添加'''通過:{attributes:[]}''''應該從輸出中刪除'''ProductCategoryRel''' –

相關問題