续集-自定义运算符

时间:2018-09-19 03:07:05

标签: mysql sql sequelize.js

我有兴趣在我们对Sequelize ORM的使用中添加几个自定义运算符。具体来说,我想添加模仿Django实现的startswithendswith查找运算符的运算符。通过Sequelize的内部结构,我似乎找不到在哪里注入这种逻辑。简而言之,我想实现的功能类似于:

{
    stringField: {
        [Op.startsWith]: 'bl'
    }
}

生成所需的sql

WHERE stringField LIKE 'bl%'

我知道在文档中所有示例都显示了手动添加%符号的方法,但是出于我的目的,我希望能够根据所使用的运算符动态包装该值。

2 个答案:

答案 0 :(得分:1)

您应该可以使用当前版本的sequelize来完成此操作,

Post.findAll(
  {
    where: {
      someAttribute: {
       $startsWith: 'my name' // or from the request body field value
     }
    }
  }
)

这可以从此处的sequelize文档中找到,以了解更多操作符。 sequelize operators

否则,您可以将$ startsWith替换为适合您需要的旧版本,

[Op.startsWith] : "field value"

答案 1 :(得分:0)

此功能不可用。为此,我们通过在将“自定义”运算符转换为实际运算符的ORM序列化之前应用一些中间件来解决此问题。

[Symbol.for('substring')]: value => ({[Sequelize.Op.like]: `%${value}%`})