![](/img/trans.png)
[英]belongsToMany called with something that's not a subclass of Sequelize.Model error
[英]Sequelize belongsToMany get source model by querying on target model
我有兩個模型Brand和Campaign 。
一個品牌可以有多個廣告系列
export default(sequelize, DataTypes)=> {
const Brand = sequelize.define('Brand', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
})
Brand.associate = models=> {
Brand.belongsToMany(models.Campaign, {
through: models.CampaignBrand,
foreignKey: 'brand',
})
}
return Brand
}
一個廣告系列也可以有很多品牌
export default(sequelize, DataTypes)=> {
const Campaign = sequelize.define('Campaign', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
})
Campaign.associate = models=> {
Campaign.belongsToMany(models.Brand, {
through: models.CampaignBrand,
foreignKey: 'campaign',
})
}
return Campaign
}
這是通過模型:
export default(sequelize, DataTypes)=> {
const CampaignBrand = sequelize.define('CampaignBrand', {
// see enums
status: {
type: DataTypes.INTEGER,
allowNull: false,
},
roleText: {
type: DataTypes.STRING,
},
})
CampaignBrand.associate = models=> {
CampaignBrand.belongsTo(models.Campaign, {
foreignKey: 'campaign',
targetKey: 'id',
onDelete: 'CASCADE',
})
}
return CampaignBrand
}
如果我想按品牌 獲得Campaigns 。 我該怎么辦? 我已經嘗試過查詢喜歡提到的文檔,但是它對我不起作用
使用“多對多”,您可以基於直通關系進行查詢並選擇特定的屬性。 例如,將findAll與through一起使用
User.findAll({包括:[{模型:項目,通過:{屬性:['createdAt','startedAt','finishedAt'],其中:{completed:true}}}]}}));
我找到了一些解決方法,但這不是我想要的:
解決方案1:
將belongsToMany Brand更新為hasMany CampaignBrand,並通過CampaignBrand.brand查詢
解決方案2:
通過查詢品牌獲取廣告系列
還有其他建議嗎?
方言: postgres
數據庫版本: 9.4
續集版本: 4.2.1
我認為您在直通模型中不需要此關聯:
CampaignBrand.associate = models=> { CampaignBrand.belongsTo(models.Campaign, { foreignKey: 'campaign', targetKey: 'id', onDelete: 'CASCADE', }) }
您已經在Brand和Campaign的定義中擁有了EmiratesToMany關聯,因此我認為您只需要使用status和roleText屬性創建CampaignBrand模型。
據我了解,您可以通過廣告系列查詢品牌,並且它應該返回每個品牌元素及其關聯的廣告系列,
Brand.findAll({ include: [{ model: Campaign }] });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.