const dateOfToday = new Date();
const timeOfToday = moment().format('HH:mm:ss');
const daysEqualToToday = db.Event.findAll({
where: {
startdate: { $eq: dateOfToday },
},
include: [{
model: db.Center,
attributes: ['id', 'name', 'location']
}],
order: [
['startdate', 'ASC'],
['starttime', 'ASC']
]
})
.then(events =>
events.filter(event => event.starttime > timeOfToday));
const daysGreaterThanToday = db.Event.findAll({
where: {
startdate: { $gt: dateOfToday },
},
include: [{
model: db.Center,
attributes: ['id', 'name', 'location']
}],
order: [
['startdate', 'ASC'],
['starttime', 'ASC']
]
});
Promise
.all([daysEqualToToday, daysGreaterThanToday])
.then((results) => {
const combinedResult = [].concat(...results);
res.status(200).json({
success: 'ok',
data: combinedResult
});
})
.catch((err) => {
res.status(500).json({
message: err.message || 'Internal server error',
});
});
}
Итак, я не смог использовать подзапрос сиквела для решения моей проблемы.Я получил предложение (не из stackoverflow), чтобы сохранить мои даты как datetime в базе данных и использовать его для сравнения datetime, непосредственно запрашивающих базу данных дважды.Я отказался от этого, потому что чувствовал, что это не очень удобно для пользователя.
В конце концов я решил пойти не на идеальное решение.Сначала выполните два запроса к базе данных: создайте запрос, когда начальная дата совпадает с сегодняшней датой, а затем отфильтруйте время начала, чтобы найти время начала, превышающее текущее время.
второй: сделать запрос, когдадата начала больше сегодняшней даты.
Затем я использовал Promise.all для разрешения обоих запросов.Как я уже сказал, решение не является идеальным, так как я делаю два вызова в базу данных, но я пойду с ним сейчас.Я буду признателен за лучшие способы реализации этого.