You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize 6使用关联子查询过滤父模型 查询最新请求符合状态的用户

报错原因

你出现missing FROM-clause entry for table "requests"报错有两个核心诱因:

  1. 你在include中配置了separate: true,这个配置会让Sequelize拆分查询:先单独查用户表,再用用户ID批量查请求表,顶层where里的$requests.status$在第一次查用户的SQL里找不到关联的requests表,自然报错。
  2. 一对多关联下直接在include中加limit确实是Sequelize 6的已知问题,没必要硬踩这个坑。

适配方案

你的需求完全可以通过子查询匹配最新请求的方式实现,不需要用到limit,代码示例如下:

const { Op, literal } = require('sequelize');

// 前提:User和Request已正确关联 User.hasMany(Request, { as: 'requests' })
const result = await User.findAll({
  offset: page,
  limit: rowsPerPage,
  subQuery: false,
  include: [{
    as: 'requests',
    model: Request,
    required: true, // 内连接,只有匹配到符合条件请求的用户才会返回
    where: {
      status: true,
      // 匹配当前用户最新的请求记录
      [Op.and]: literal(`requests.created_at = (SELECT MAX(created_at) FROM requests WHERE user_id = User.id)`)
    }
  }]
});

这个写法生成的SQL和你想要的原生SQL逻辑完全一致:先找到每个用户的最新请求,过滤出status为true的,再关联返回对应的用户和这条最新请求,同时避开了关联limit的bug。

内容的提问来源于stack exchange,提问作者Makis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:00