2017-08-30 47 views
0

我有兩個模型品牌活動續集belongsToMany通過查詢目標模型獲取源模型

一個品牌可以有很多廣告活動

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 
} 

在情況下,我想通過品牌獲得廣告活動。我該怎麼辦? 我試圖查詢喜歡提到的文件,但它不爲我工作

有了屬於一對多的,你可以根據通過關係查詢,然後選擇特定的屬性。例如使用的findAll通過

User.findAll({ 包括:[{ 模型:項目,通過 :{ 屬性:[ 'createdAt', 'startedAt', 'finishedAt'], 其中:{完成:真} } }] });

我已經找到了一些解決的方法,但它不是我所期待的:

解決方案1:

更新belongsToMany品牌的hasManyCampaignBrand以及查詢CampaignBrand.brand

解決方案2:

通過查詢品牌

任何其他建議獲得活動

方言:的Postgres

數據庫版本: 9.4

Sequelize版本: 4.2。1

回答

0

我覺得你並不需要這種關聯在了通過模型:

CampaignBrand.associate = models=> { CampaignBrand.belongsTo(models.Campaign, { foreignKey: 'campaign', targetKey: 'id', onDelete: 'CASCADE', }) }

你已經在品牌和運動的定義belongsToMany關聯,所以我覺得你只需要使用狀態和角色文本屬性創建CampaignBrand模型。

據我瞭解,那麼你可以通過活動查詢品牌和它應該返回各個品牌元素及其相關活動,

Brand.findAll({ include: [{ model: Campaign }] });