问题描述
我正在尝试制作过滤歌曲,我有一系列从客户端检索的流派ID,我这样做是为了从一个ID中获取所有音频:
Audio.findAll({
include: [{
model: db.Genres,as: "genres",where: {
id: {
[Op.and]: [1]
}
},}]
})
但是我需要从流派/情绪数组中获取包含所有ID的所有音频,还希望通过流派ID和情绪ID来过滤音频,但是我不知道该如何制作,任何想法? (一首歌可以有多种流派/情绪)
歌曲模型
const Audio = sequelize.define('Audio',{
id: {
autoIncrement: true,type: DataTypes.INTEGER(30),allowNull: false,primaryKey: true
},name: {
type: DataTypes.STRING(255),allowNull: false
},})
Audio.associate = function(models) {
Audio.belongsToMany(models.Genres,{through: 'AudioGenres',foreignKey: 'id_audio',as: 'genres'})
Audio.belongsToMany(models.Moods,{through: 'AudioMoods',as: 'moods'})
}
AudioGenreModel
const AudioGenres = sequelize.define('AudioGenres',{
id_audio: {
type: DataTypes.INTEGER(11),primaryKey: true,references: {
model: 'Audio',key: 'id'
}
},id_genre: {
type: DataTypes.INTEGER(11),references: {
model: 'Genres',key: 'id'
}
})
AudioGenres.associate = function(models) {
AudioGenres.belongsTo(models.Audio,{foreignKey: 'id_audio'})
AudioGenres.belongsTo(models.Genres,{foreignKey: 'id_genre'})
};
AudioMoodModel
const AudioMoods = sequelize.define('AudioMoods',id_mood: {
type: DataTypes.INTEGER(11),references: {
model: 'Mods',key: 'id'
}
})
AudioMoods.associate = function(models) {
AudioMoods.belongsTo(models.Audio,{foreignKey: 'id_audio'})
AudioMoods.belongsTo(models.Mods,{foreignKey: 'id_mood'})
};
情绪和流派模型
const Moods = sequelize.define('Moods',{
name: {
type: DataTypes.STRING(255),})
Moods.associate = function(models) {
Moods.belongsToMany(models.Audio,foreignKey: 'id_mood',as: 'audios'})
}
const Genres = sequelize.define('Genres',})
Genres.associate = function(models) {
Genres.belongsToMany(models.Audio,foreignKey: 'id_genre',as: 'audios'})
}
解决方法
我想您应该在两个这样的include
选项中的AND运算符中添加所有条件:
Audio.findAll({
include: [{
model: db.Genres,as: "genres",where: {
[Op.and]: [{ id: 1},{ id: 3},{ id: 2}]
},},{
model: db.Moods,as: "moods",where: {
[Op.and]: [{ id: 4},{ id: 5},{ id: 6}]
},}]
})