2016-01-19 56 views

回答

1

根據文章如何(假設任何一篇文章都可以涉及多個產品和/或多個品牌) 要實現這一點,最好的方法是建立從文章到產品和品牌的:m關係。 docs在這裏更詳細地解釋這個: Sequelize Docs - Association#Scopes

所以,例如:

Article = sequelize.define('article', { 
    title: DataTypes.String, 
    text: DataTypes.TEXT 
}); 

ArticleAbout = sequelize.define('article_about', { 
    about_id: { 
     type: DataTypes.INTEGER, 
     unique: 'about_article_ref' 
    }, 
    about: { 
     type: DataTypes.STRING, 
     unique: 'about_article_ref', 
    }, 
    reference_id: { 
     type: DataTypes.INTEGER, 
     unique: 'about_article_ref', 
     references: null 
    } 
}); 

Brand.belongsToMany(Article, { 
    through: { 
     model: ArticleAbout, 
     unique: false. 
     scope: { 
      about: 'brand' 
     } 
    }, 
    foreignKey: 'reference_id', 
    constraints: false 
}); 

Product.belongsToMany(Article, { 
    through: { 
     model: ArticleAbout, 
     unique: false. 
     scope: { 
      about: 'product' 
     } 
    }, 
    foreignKey: 'reference_id', 
    constraints: false 
}); 

Article.belongsToMany(Brand, { 
    through: { 
     model: ArticleAbout, 
     unique: false 
    }, 
    foreignKey: 'about_id' 
}); 

Article.belongsToMany(Product, { 
    through: { 
     model: ArticleAbout, 
     unique: false 
    }, 
    foreignKey: 'about_id' 
}); 

關鍵件是unique: 'string'through:

通過設置唯一的字符串,你告訴Sequelize撰寫該鍵爲複合鍵的一部分,這意味着幾個對象可以關聯到一把鑰匙。 constraints: false指示編譯器停止對所有交叉引用外鍵的尖叫。

設置through:通過表格設置關係,就像您在使用的AboutArticle表中描述的一樣。

然後你就可以開始添加到產品和品牌的文章:

product.addArticle(article); 
brand.addArticle(article); 

這是,查詢表變爲一個非常簡單的任務:

Article.getProducts(); 
Article.getBrands(); 
Product.getArticles(); 
Brand.getArticles(); 

希望有所幫助。