You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize关联模型查询时使用lower转列名小写排序失败问题

错误根因

报错的核心是Sequelize解析排序规则时,将lower()函数错误识别为bookmarks关联表的属性,生成了非法的``bookmarks.lower(bookmarks.name)语法。本质是当排序规则使用Sequelize.fn时,不需要在order数组的第一位传入关联模型配置——因为Sequelize.col中已经指定了关联表的别名前缀,足以让Sequelize定位到对应字段,额外加关联模型配置反而会导致解析异常。


解决方案

直接调整order规则的生成逻辑即可:

const order = orderType == 'name'
  // name排序场景:直接传入函数和排序规则,无需前置关联模型配置
  ? [[
      Sequelize.fn('lower', Sequelize.col('bookmarks.name')),
      'ASC'
    ]]
  // 其他字段排序场景:保留原有写法即可
  : [[{ model: Bookmark, as: 'bookmarks' }, orderType, 'ASC']]

修改后生成的SQL会变为合法格式:

ORDER BY lower(`bookmarks`.`name`) ASC

完全符合SQLite语法要求,不会再触发语法报错。


内容的提问来源于stack exchange,提问作者Paul Ulibro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:24:04