Moim prostym przypadkiem użycia jest przekazanie date
i porównanie go z domyślną kolumną createdAt
.
where: {
createdAt: {
$eq: date
}
}
A moja data jest ciągiem takim jak ten date = '2018-12-12'
Problem polega na tym, że sekwencja nie jest porównywana tylko z datą. Ale dodaje godzinę 00:00:00 do mojej daty, a następnie porównuje. Tak więc generowanie sekwencji zapytania wygląda tak.
WHERE `redeem_points`.`createdAt` = '2018-11-02 00:00:00';
Na co zasłużyłem
WHERE `redeem_points`.`createdAt` = '2018-11-02';
Jak mogę to osiągnąć za pomocą sequlize?
2 odpowiedzi
Myślę, że chciałbyś czegoś więcej w stylu:
{
where: {
createdAt: { [Op.like]: `${date}%`, },
}
}
Co dałoby składnię SQL taką jak (zwróć uwagę na symbol wieloznaczny):
WHERE createdAt LIKE '2018-11-02%'
Operatory mogą dać Ci szeroki zakres odpowiedników składni SQL, dodatkowo ja myślę, że skrót, którego używasz, jest przestarzały, więc podpisałem składnię Op
, że możesz potrzebować tego jako sequelize.Op
, jeśli nie destrukturyzujesz swoich zmiennych.
Użyłem biblioteki moment.js, ale oczywiście początek i koniec dnia można uzyskać za pomocą Funkcjonalność JS. musisz również sprawdzić strefę czasową.
let condition = {};
// For the case when you want to get a data for the specific date
// if (date) {
// condition.createdAt = {
// [Op.and]: [
// {
// [Op.gte]: moment(date)
// .startOf("day")
// .format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"),
// },
// {
// [Op.lte]: moment(date)
// .endOf("day")
// .format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"),
// },
// ],
// };
// }
// If you want to get a data for the current day
condition.createdAt = {
[Op.and]: [
{
[Op.gte]: moment().startOf("day").toDate(),
},
{
[Op.lte]: moment().endOf("day").toDate(),
},
],
};
ActivityLog.findAll({
where: condition,
});