首页 > 解决方案 > 在 Sequelize 查询中使用带函数的 WHERE

问题描述

我正在尝试JSON_ARRAY_LENGTH()在我的 Sequelize 查询中使用函数 , :

MyModel.query({
  where: sequelize.where(
    sequelize.fn('JSON_ARRAY_LENGTH', sequelize.col('cues')),
    0
  )
});

这似乎不起作用。它会生成一个错误的查询:

SELECT id, title, /* etc. etc. */
FROM MyModel
WHERE
  `MyModel`.`attribute` = JSON_ARRAY_LENGTH(`cues)` AND
  `MyModel`.`comparator` = '=' AND
  `MyModel`.`logic` = 0;

这一切是什么attribute,,comparatorlogic东西,我该如何关闭它?

文档似乎支持我正在做的事情。它的例子:

Post.findAll({
  where: sequelize.where(sequelize.fn('char_length', sequelize.col('status')), 6)
});
// SELECT * FROM post WHERE char_length(status) = 6;

任何想法将不胜感激。谢谢!

标签: sqlitesequelize.js

解决方案


看来我偶然发现了一个错误:

https://github.com/sequelize/sequelize/issues/6440

这已在最近的版本中得到修复:

https://github.com/sequelize/sequelize/pull/9730/commits/3b2972db2c494c8a4118a7e6c16aad0fc2e0eebe

现在的解决方法是用 AND 包装我的查询:

MyModel.query({
  where: {
    [sequelize.Op.and]: sequelize.where(
      sequelize.fn('JSON_ARRAY_LENGTH', sequelize.col('cues')),
      0
    )
  }
});

推荐阅读