[英]How can I bind a variable to sequelize literal?
我有这个子查询,用于检查与源模型相关的列是否存在。
const defaultingLoans = await Loan.findAll({
where: {
[Op.and]: database.sequelize.literal('EXISTS(SELECT * FROM "Instalments" WHERE "Instalments"."loanId" = "Loan"."id" AND "Instalments"."status" = 'pending')')
}
});
查询工作正常,但理想情况下pending
的值不会被修复,所以我想在那里有一个可用于查询不同状态的变量。
如何用变量替换挂起的字符串。
连接在这里不起作用,因为 Sequelize 有一种奇怪的方式来解析连接的 SQL 查询,这会导致错误。 一个例子在这里https://pastebin.com/u8tr4Xbt我在这里截取了错误的屏幕截图
您可以将defaultingLoans
变成一个接受金额的函数:
const defaultingLoans = amount => await Loan.findAll({
where: {
[Op.and]: database.sequelize.literal(`EXISTS(SELECT * FROM "Instalments" WHERE "Instalments"."loanId" = "Loan"."id" AND "Instalments"."amount" = ${amount})`)
}
});
用法:
const loans = defaultingLoans(2000);
编辑:虽然这里应该注意你需要清理或引用传递给这个函数的amount
以避免 SQL 注入攻击。
您可以将bind
对象放在查询对象中:
let status = 'Pending';
const defaultingLoans = await Loan.findAll({
where: database.sequelize.literal('EXISTS(SELECT * FROM "Instalments" WHERE "Instalments"."loanId" = "Loan"."id" AND "Instalments"."status" = $status)'),
bind: {status}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.