#javascript #mysql #node.js #express #sequelize.js
#javascript #mysql #node.js #выразить #sequelize.js
Вопрос:
У меня есть массив идентификаторов teamsIdsSelected = ['1', '5', .., 'X']
Затем из моей таблицы с именем ‘Challenge’ я хочу получить все вызовы, которые связаны с каждым TeamID из массива teamsIdsSelected. Пока это то, что я пробовал:
- Используя эту функцию:
createWhereClause(column, field) {
return models.sequelize.where(
models.sequelize.literal(`${column} in (`),
`'${field}'`,
models.sequelize.literal(')'))
},
- Решение проблем таким образом:
const challenges = await Challenge.findAndCountAll({
where: {
team_id: createWhereClause(team_id, teamsIdsSelected)
}
})
Но это не работает, я получаю вызов только с team_id, равным последнему элементу teamsIdsSelected = teamsIdsSelected.slice(-1)[0]
Например, если teamsIdsSelected = ['1', '4', '7']
, предложение where в конце (когда я смотрю на журнал) является только "where challenge.team_id = 7"
.
Что мне действительно хотелось бы, так это условие OR, которое принимало бы все вызовы, соответствующие 1, 4 или 7, в качестве team_id. Есть ли быстрый способ сделать это без создания цикла for?
Дайте мне знать, если вам нужна более точная информация о моей проблеме. Спасибо.
Комментарии:
1.
Op.or
илиOp.in
docs.sequelizejs.com/manual/querying.html#operators2. @bato3 большое спасибо, я не знал о op.in ! как мне обозначить ваш комментарий в качестве ответа?
Ответ №1:
const challenges = await Challenge.findAndCountAll({
where: {
team_id: { [Op.in]: teamsIdsSelected }
}
})