Sequelize多对多关联嵌套查询字段名截断问题咨询
Sequelize多对多关联嵌套查询字段名截断问题
问题现象
查询包含多对多(M:N)关联的模型并嵌套多层include时,对象的字段键名会被截断为固定长度。例如:
- UserGroup与BitrixResponsible为M:N关联(别名
bitrix_responsible) - BitrixPortal模型包含字段
webhook_inbound_url - 预期访问路径:
record -> bitrix_responsible -> [0] -> bitrix_account -> bitrix_portal -> webhook_inbound_url - 实际返回的键名被截断为
webhook_inboun,其他长字段也存在相同截断情况
环境与配置
使用版本
- Node v18.17.1
- sequelize ^6.33.0
- sequelize-hierarchy-fork ^1.0.0
查询参数
{ include: [ {model: models.BitrixResponsible.scope('with_relations_deep'), as: 'bitrix_responsible'} ] }
Scope配置
BitrixAccount.addScope('with_relations', { include: [ { model: BitrixPortal.scope('self_only'), as: 'bitrix_portal'}, ], }) BitrixResponsible.addScope('with_relations_deep', { include: [ { model: BitrixAccount.scope('with_relations'), as: 'bitrix_account'}, { model: UserPosition, as: 'position'}, ], })
BitrixPortal模型定义
class BitrixPortal extends Model {} BitrixPortal.init( { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, allowNull: false, primaryKey: true }, account_id: { type: DataTypes.UUID, allowNull: false }, default_responsible_id: { type: DataTypes.UUID, allowNull: true }, // other fields webhook_inbound_url: { type: DataTypes.STRING, allowNull: true }, webhook_outbound_token: { type: DataTypes.STRING, allowNull: true }, // other fields }, { ...default_model_options( 'bitrix_portals', 'bitrix', 'BitrixPortal', true, true), defaultScope: { attributes: { exclude: ['webhook_inbound_url', 'webhook_outbound_token'] }, include: [], }, scopes: { ...default_model_scopes(), }, } )
排查过程
- 将scope替换为直接编写
include配置,问题依旧,排除scope本身的影响 - 单独查询BitrixResponsible并携带
with_relations_deepscope时,字段名显示正常;仅通过UserGroup的M:N关联嵌套查询时才会出现截断
临时方案
先查询不带嵌套include的BitrixResponsible记录,收集ID后单独查询携带with_relations_deep scope的记录,此时字段名正常。
疑问
该现象属于Sequelize的Bug,还是遗漏了某些配置项,或是需要升级版本解决?
内容的提问来源于stack exchange,提问作者FuketsuBaka
相关产品推荐
相关产品推荐

