簡體   English   中英

我怎樣才能綁定一個變量來續集文字?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM