我将无服务器框架与无服务器离线插件一起使用。我一直在离线开发 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 上,然后......它不起作用。
它不起作用,因为由于某种原因,在 Lambda 上,同一个客户表被别名为“l”。如果我编辑我的硬编码查询以将客户表引用为“l”,那么它在 Lambda 上工作正常......但它停止离线工作,因为离线它被别名为“客户”。
有什么方法可以强制 Sequelize 将表别名为某个名称?或者我可以做些什么来规范两个环境之间的名称?