Sequelize一对多关联查询报SequelizeEagerLoadingError错误如何解决
错误原因
- 关联别名不匹配:你在User模型中定义
User.hasMany(User_has_signature, {as: 'user_has_signature'})关联时指定了别名,但控制器预加载查询的include配置中没有声明对应as参数,Sequelize无法匹配到已定义的关联关系,直接抛出该错误。 - 配置冗余错误:你当前是User对User_has_signature的一对多关联,
include中使用的through参数仅适用于多对多关联的中间表配置,属于多余配置,会引发额外逻辑异常。 - 字段拼写错误:查询条件中的字段名
signature_ttype_signature_type_id多写了一个t,和模型中实际定义的signature_type_signature_type_id不一致。
修复方法
直接修改控制器中的查询代码即可:
const User = require("../../model/user/user") const User_has_signature = require("../../model/user/user_has_signature") async index(req, res){ const user = await User.findAll({ include: [{ model: User_has_signature, // 新增和关联定义完全一致的as参数 as: 'user_has_signature', // 修正字段名,移除多余的through、foreignKey配置 where: {signature_type_signature_type_id: 3}, // 可选配置:如果需要保留没有对应签名的用户数据,加上下面这行,会走左关联查询 // required: false }] }) res.status(200).json(user) return }
内容的提问来源于stack exchange,提问作者Code Hard
相关产品推荐
相关产品推荐

