![](/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.