我有两个型号品牌和广告系列。
品牌可以包含多个广告系列
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
}
如果我想通过品牌 获取广告系列。我该怎么办? 我已经尝试了查询喜欢提到的文档,但它对我不起作用
使用Belongs-To-Many,您可以根据关系进行查询并选择特定属性。例如,使用findAll with through
User.findAll({ 包括:[{ 型号:项目, 通过:{ 属性:[' createdAt',' startedAt',' finishedAt'], 其中:{completed:true} } }] });
我找到了一些解决方法,但这不是我想要的:
解决方案1:
将 belongsToMany 品牌更新为 hasMany CampaignBrand 以及 CampaignBrand.brand
解决方案2:
通过查询品牌
获取广告系列还有其他任何建议吗?
方言: postgres
数据库版本: 9.4
Sequelize版本: 4.2.1
答案 0 :(得分:0)
我认为你在通过模型中不需要这种关联:
CampaignBrand.associate = models=> {
CampaignBrand.belongsTo(models.Campaign, {
foreignKey: 'campaign',
targetKey: 'id',
onDelete: 'CASCADE',
})
}
您已经在Brand和Campaign的定义中拥有belongsToMany关联,因此我认为您只需要使用status和roleText属性创建CampaignBrand模型。
据我了解,您可以通过广告系列查询品牌,并且应该返回每个品牌元素及其相关广告系列
Brand.findAll({
include: [{
model: Campaign
}]
});