背景
- 使用的是egg-sequelize
- 早就全局设置了
freezeTableName: true
,正常查询不会修改查询的表名 - 多对一查询时也没有修改表名为复数
出错的SQL:
SELECT group
.id
, user
.id
AS id
, user
.name
AS name
, user
.avatar
AS avatar
FROM group
AS group
LEFT OUTER JOIN ‘user’ AS ‘users’ ON group
.id
= users
.group_id
;
注意加粗部分👆
原因
附 Sequelize中文文档 检索关键词:命名策略
当我们使用多对一查询的时候,因为是多对一,sequelize认为我们每一条数据只对应一个关联数据,所以会使用单数的表名进行查询。
而当我们使用一对多或多对多的时候,Sequelize认为我们一条数据的关联数据是多个,所以会将表名指定为复数,返回的数据也是复数形式。