Я использую Serverless Framework с плагином serverless-offline. Я разрабатывал функцию AWS Lambda в автономном режиме и пока не имел серьезных проблем.
Мне нужно выполнить более сложный SQL-запрос, поэтому я решил использовать метод literal
для написания некоторого чистого SQL. Я проверил журнал и увидел, что Sequelize (с sequelize-typescript) присваивал псевдонимы именам таблиц, чтобы они соответствовали именам моделей (или, в случае отношений таблиц, псевдонимы совпадали с ключом, которому была назначена связь. Я написал свой SQL соответственно и получил следующее.
const customer = await this.findOne({
include: [Coupons, CustomersInfo],
where: {
email_address: {
[Op.eq]: sql.literal(`binary '${email}'`)
},
authorization_level: {
[Op.ne]: 6
},
[Op.and]: [
sql.literal(`
CASE WHEN '${coupon_code}' is null || '${coupon_code}' = ''
THEN (coupon.coupon_flag !=2 || coupon.coupon_flag is null)
ELSE Customers.referral = '${coupon_code}'
END
`)
]
},
});
Итак, снова, чтобы уточнить, в журналах я мог видеть, что таблица клиентов была привязана к клиентам, а таблица купонов была привязана к купону.
Я провел кучу локальных разработок в автономном режиме, используя плагин serverless-offline
, просто поставил его на лямбду и ... он не работает.
Это не работает, потому что по какой-то причине в Lambda одна и та же таблица клиентов имеет псевдоним l. Если я отредактирую свой жестко закодированный запрос, чтобы он ссылался на таблицу клиентов как l, тогда он отлично работает с Lambda ... но он перестает работать в автономном режиме, потому что в автономном режиме он становится псевдонимом Customers.
Есть ли способ заставить Sequelize присвоить таблице определенное имя? Или что-то, что я могу сделать, чтобы нормализовать имена между двумя средами?