Конвертировать mySQL запрос в KNEX - PullRequest
0 голосов
/ 18 февраля 2020

Я конвертирую серию запросов в синтаксис Knex. У меня проблема с этим запросом:

SELECT id,reviewed,log_reference,CONVERT(notification USING utf8),create_time,update_time,store,user_id
FROM store_failure_log
WHERE reviewed = 0
AND create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW();

Точнее, с этой строкой:

SELECT id,reviewed,log_reference,CONVERT(notification USING utf8),create_time,update_time,store,user_id

У меня есть этот Knex:

knex('store_failure_log')
        .select('id', 'reviewed', 'log_reference', 'CONVERT(notification USING utf8)', 'create_time', 'update_time', 'store', 'user_id').convert('notification USING utf8')
        .where('reviewed', 0)
        .where(knex.raw('create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()'))

, который производит это sql query:

select `id`, `reviewed`, `log_reference`, `CONVERT(notification USING utf8)`, `create_time`, `update_time`, `store`, `user_id` from `store_failure_log` where `reviewed` = 0 and create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()

Проблема в: Преобразовать (уведомление, использующее utf8).

Запрос недействителен, так как Преобразование в скобках. Как я могу написать это с помощью knex?

В общем, как включить SQL вызовы функций в синтаксис KNEX?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы можете использовать raw для включения SQL вызовов функций в запрос Knex, как вы уже сделали в where:

knex('store_failure_log')
        .select(knex.raw('id, reviewed, log_reference, CONVERT(notification USING utf8), create_time, update_time, store, user_id'))
        .where('reviewed', 0)
        .where(knex.raw('create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()'))
0 голосов
/ 19 февраля 2020

Вот исправленная версия ответа @ Veve с правильным цитированием идентификаторов и синтаксисом knex.raw:

knex('store_failure_log')
        .select('id', 'reviewed', 'log_reference', knex.raw('CONVERT(?? USING utf8)', ['notification']), 'create_time', 'update_time', 'store', 'user_id')
        .where('reviewed', 0)
        .where(knex.raw('?? BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()', ['create_time']))

https://runkit.com/embed/lh2i1qif7obx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...