如何使用包含模型中的属性来创建 where 条件?

Posted

技术标签:

【中文标题】如何使用包含模型中的属性来创建 where 条件?【英文标题】:How use attribute from include model to make a where condition? 【发布时间】:2019-08-21 17:18:47 【问题描述】:

我想在我的查询中使用包含模型的属性,我使用 sequelize 和 sequelize-typescript 以及一些以前的版本,我使用文字将 sql 变量注入到我的查询模型中并且可以工作,但是这些方法已经被淘汰了,因为它是SQL 注入漏洞和现在,我不知道访问我的包含模型的属性有什么用

我想使用 cve_agenda 属性来评估 invitados.cve_funcionario 在同一级别的 or 运算符

我用这些:

M_AG_EVENTOS.findAll(
                where: 
                        $or: [
                          cve_agenda: cve_agenda, ORM.instance.seql.literal(`"invitados"."cve_funcionario" =$cve_funcionario`),
ORM.instance.seql.literal(`"comisionado"."cve_funcionario" = $cve_funcionario`)]
                 ```




【问题讨论】:

【参考方案1】:

在您的示例中,SQL 注入是可能的,因为您直接在查询字符串中传递参数。防止 SQL 注入的最好方法是使用准备好的语句。然后将 SQL 查询和参数分开,数据库读取参数作为文本(因此即使参数值为DELETE FROM users,它也不会被执行,只是被视为字符串)。使用Sequelize,您可以使用Bind parameters 来实现。

但回到您的问题,这里是一个示例,使用 include 进行查询的外观:

ModelA.findAll(
  where:  name: 'John' ,
  include: [
    model: ModelB,
    as: 'modelB',
    where:  active: true ,
  ],
);

【讨论】:

以上是关于如何使用包含模型中的属性来创建 where 条件?的主要内容,如果未能解决你的问题,请参考以下文章

与模型属性的 where 条件的雄辩关系

如何为模型中的所有选择查询定义默认 where 条件?

sql server创建视图添加where条件,条件包含一个参数

使用 group by 和 like 语句时如何让 SQL 使用 where 条件

如何从原始对象创建一个Eloquent模型实例?

mysql'WHERE'条件中的列号