J'ai deux modèles Marque et campagne.Sequelize belongsToMany obtenir le modèle source en interrogeant le modèle cible
A Marque peut avoir de nombreuses campagnes
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
}
A Campagne peut aussi avoir beaucoup Marque
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
}
Et est par modèle ici:
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
}
Si je veux obtenir campagnes par marque. Que devrais-je faire? J'ai essayé requête aime document mentionné, mais il ne fonctionne pas pour moi
Avec Appartient-To-Many vous pouvez interroger sur la base par rapport et sélectionnez des attributs spécifiques. Par exemple en utilisant findAll avec par
User.findAll ({ comprennent: [{modèle : Projet, par: { attributs: [ 'createdAt', 'startedAt', 'finishedAt'], où : { achevé: vrai} } }] });
J'ai trouvé des façons de contourner, mais ce n'est pas ce que je cherche:
SOLUTION 1:
Mise à jour belongsToManyMarque à hasManyCampaignBrand et la requête par CampaignBrand.brand
SOLUTION 2:
Obtenez Campagne en questionnant Marque
Tous les autres conseils?
Dialect: postgres
version de base de données: 9.4
version Sequelize: 4.2.1