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
相关产品推荐
相关产品推荐

