我有3个具有以下关联的表。
STUDENTS.hasMany(REPORTS);
REPORTS.belongsTo(STUDENTS);
REPORTS.hasMany(TASKS);
TASKS.belongsTo(REPORTS);
任务表
| id | name | report_id |
|----|--------|-------------|
| 01 | taskA | 01 |
| 02 | taskB | 02 |
| 03 | taskC | 03 |
报告表
| id | student_id |
|----|------------|
| 01 | 01 |
| 02 | 02 |
| 03 | 01 |
学生桌
| id | name |
|----|------|
| 01 | tom |
| 02 | jim |
我正在尝试创建一个如下所示的输出。在这里,我有学生的名字以及他们完成的任务的数量(通过报告表链接)。
| student| no_of_tasks |
|--------|-------------|
| tom | 01 |
| jim | 02 |
以下是我尝试使用sequelize进行的查询,但它似乎不起作用。
STUDENTS.findAll({
attributes: [
'name',
],
include: [
{
model: REPORTS,
attributes: [
[sequelize.fn('COUNT', sequelize.col('tasks.id')), 'no_of_tasks'],
],
include: [
{
model: TASKS,
attributes: [],
},
],
},
],
raw: true,
nest: true,
});
我知道可以使用原始sql查询获得此解决方案 但我希望使用Sequelize js ORM找到答案。
答案 0 :(得分:0)
我不确定nested: true
的用途是什么...但是对于此查询,您缺少分组依据。在与raw: true,
相同的级别上添加
group: ['name'],
对于这种类型的问题,您可以通过将由序列化生成的SQL复制并粘贴到MySqlWorkbench或类似的工具中进行调试,以了解问题所在。