#javascript #mysql #typeorm
#javascript #mysql #typeorm
Вопрос:
Я пытаюсь запросить все записи с сегодняшнего дня, но ничего не получаю, поэтому мой вопрос: как выполнить запрос с проверкой даты в TypeORM?
Мой код:
all = await connection
.createQueryBuilder(Earnings, 't0')
.addSelect('t3.id', 't3_id')
.addSelect('t3.UID', 't3_UID')
.addSelect('t3.name', 't3_name')
.addSelect('t3.chips', 't3_chips')
.addSelect('t3.tickets', 't3_tickets')
.addSelect('t3.masteredLevel', 't3_masteredLevel')
.addSelect('t2.UID', 't2_UID')
.addSelect('t2.name', 't2_name')
.addSelect('t2.rule', 't2_rule')
.addSelect('t1.id', 't1_id')
.innerJoin(Questions, 't1', 't0.questionID = t1.id')
.innerJoin(Lessons, 't2', 't1.lessonUID = t2.UID')
.innerJoin(Topics, 't3', 't2.topicUID = t3.UID')
.where('t0.challenge = 1')
.andWhere('t0.createdAt = :today')
.andWhere('t0.userID = :userID')
.setParameters({ userID: user.id })
.setParameters({ today: moment() })
.getRawMany()
Ответ №1:
Ваш .andWhere('t0.createdAt = :today')
выбирает только строки, созданные в момент сегодняшнего параметра. Вы установили этот параметр как moment()
, который не является датой.
Поскольку мы можем с уверенностью предположить, что в будущем строки не будут созданы, вашим самым простым решением здесь является: .andWhere('t0.createdAt >= :today')
, который выбирает строки, созданные ПОСЛЕ 00:00 сегодня.
Вы можете объединить параметры addWhere и setParameters в один:
.andWhere('t0.createdAt >= :today', { today: moment().toDate() }) // note moment.toDate()
В качестве альтернативы используйте функцию MySQL CURDATE() для получения текущей даты:
.andWhere('t0.createdAt >= CURDATE()')
Когда вы протестируете это, я рекомендую вам включить полное ведение журнала TypeORM, чтобы вы могли видеть фактический сгенерированный SQL и могли быстро решать любые проблемы. См. Раздел Ведение журнала TypeORM.
Комментарии:
1. спасибо, чувак, «.andWhere(‘t0.createdAt >= CURDATE()’)» то, что я искал
Ответ №2:
Для TypeORM PSQL
Сортировка элементов по сегодняшней дате
.andWhere('t0.createdAt >= CURRENT_DATE')