[英]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.