Использование функции MySQL FIELD в Sequelize - PullRequest
0 голосов
/ 12 марта 2020

Мне нужно повторить следующее в Sequelize. К сожалению, я не смог воспроизвести его полностью и недостаточно, чтобы заставить его работать. Мне нужно ORDER BY FIELD.

Рабочий запрос

SELECT * FROM счетов-фактур ORDER BY FIELD (invoice_status_key, 'unpaid', 'overduy', 'open ',' платный ') ASC;

Вот код, который у меня есть, он близок, но не точен и не работает:

Invoice.findAll ({order: [[sequelize.fn ('FIELD', ['invoice_status_key', 'open', 'unpaid', 'overdue', 'paid']), 'AS C']], logging: console.log});

Этот код производит следующий запрос:

SELECT id, company_id, customer_id, job_id, invoice_status_key, identifier, subtotal, tax, shipping, total, summary, due_at, paid_at, created_at, updated_at ОТ invoices КАК Invoice ЗАКАЗ ПО ПОЛЕ ('invoice_status_key' , «открыто», «не оплачено», «просрочено», «оплачено») ASC;

Предположительно, что неправильно, то поле invoice_status_key заключено в кавычку внутри функции, в то время как функция ожидает его НЕ цитироваться. Я пробовал множество способов, и это самый близкий из всех, что я получил, но, к сожалению, он не дает результатов в правильном порядке.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 марта 2020

Мне удалось использовать буквальный и необработанный запрос для достижения sh того, что я хотел.

let invoices = await Invoice.findAll ({order: [sequelize.literal ("FIELD (invoice_status_key, 'open', 'unpaid', 'Просрочено', 'paid') AS C ")]]});

, что привело к ожидаемому конечному результату.

...