Sequelize嵌套模型排序报错:无法找到有效关联,需按end_date排序
解决Sequelize关联模型Session按end_date排序的问题
你的排序写法有误,针对GroupSession hasMany Session的关联场景,正确的排序方式有两种:
方法一:在关联模型的include配置内添加排序
直接在Session的include选项里指定排序规则,逻辑更清晰,适合单独对该关联模型排序的场景:
const groupSessions = await groupSessionRepo.findAllGroupSessions({ where: { teacher_id: userId }, include: [ { model: Class, attributes: { exclude: ['created_at', 'updated_at', 'deleted_at', 'id'], }, }, { model: Session, where: { end_date: { [Op.lte]: new Date() } }, attributes: ['name', 'end_date', 'participants_nb'], // 对当前关联的Session按end_date升序排序 order: [['end_date', 'ASC']] }, ], attributes: [], });
方法二:在主order选项中指定关联模型排序
如果需要在主排序规则里统一配置,要注意格式是二维数组,将关联模型作为数组的第一个元素:
const groupSessions = await groupSessionRepo.findAllGroupSessions({ where: { teacher_id: userId }, include: [ { model: Class, attributes: { exclude: ['created_at', 'updated_at', 'deleted_at', 'id'], }, }, { model: Session, where: { end_date: { [Op.lte]: new Date() } }, attributes: ['name', 'end_date', 'participants_nb'], }, ], // 正确格式:[[关联模型, 字段名, 排序方向]] order: [[Session, 'end_date', 'ASC']], attributes: [], });
注意事项
如果你的GroupSession和Session的关联定义了别名(比如hasMany(Session, { as: 'sessions' })),那么在排序时需要用别名替代Session模型,写法变为:
order: [['sessions', 'end_date', 'ASC']]
内容的提问来源于stack exchange,提问作者Ali Benromdhane
相关产品推荐
相关产品推荐

