繁体   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