TypeORM запрашивает все записи с сегодняшнего дня

#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')