序列化函数在哪里

Cen*_*ell 4 orm node.js sequelize.js

我在 Node 12 上使用sequelize 5.21.2。

我想要这样:

SELECT `id`
FROM `order`
WHERE (substr(`order`.`code`,1,8) >= '20200101'
AND substr(`order`.`code`,1,8) <= '20201230')
Run Code Online (Sandbox Code Playgroud)

所以我这样写:

return Model.order.findAll({
  attributes: [
    'id',
  ],
  where: {
    [sequelize.fn('substr', Model.sequelize.col('code'), 1, 8)]: {
      [Op.gte]: params.start_date,
      [Op.lte]: params.end_date,
    },
  },
});
Run Code Online (Sandbox Code Playgroud)

但它返回:

SELECT `order`.`id`
FROM `order`
WHERE (`order`.`[object Object]` >= '20200101'
AND `order`.`[object Object]` <= '20201230')
Run Code Online (Sandbox Code Playgroud)

我试过

[sequelize.literal('STR_TO_DATE(substr(code,1,8),\'%Y %m %d\')'), 'order_date']
[sequelize.literal('STR_TO_DATE(substr(code,1,8),\'%Y %m %d\')')]
[sequelize.fn('substr', Model.sequelize.col('code'), 1, 8)]
Run Code Online (Sandbox Code Playgroud)

但他们工作得很好,当我SELECT,但不是WHERE

我怎样才能得到我想要的结果?我在官方手册中找不到任何相关信息..(https://sequelize.org/v5/manual/querying.html#where

dou*_*arp 6

使用sequelize.whereandOp.and来生成使用函数而不是列的 select 语句。请参阅 Sequelize 文档中的此页面 -使用函数进行高级查询(不仅仅是列)

const { sequelize, order } = Model;
return order.findAll({
  attributes: [
    'id',
  ],
  where: {
    [Op.and]: [
      sequelize.where(sequelize.fn('substr', sequelize.col('code'), 1, 8), {
        [Op.gte]: params.start_date,
      }),
      sequelize.where(sequelize.fn('substr', sequelize.col('code'), 1, 8), {
        [Op.lte]: params.end_date,
      }),
    ],
  },
});
Run Code Online (Sandbox Code Playgroud)