Агрегировать данные из вложенной модели в sequelize - PullRequest
4 голосов
/ 08 июля 2019

У меня есть 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.

1 Ответ

0 голосов
/ 09 июля 2019

Я не совсем уверен, что подразумевается под nested: true ... но для этого запроса вам не хватает группировки. На том же уровне, что и raw: true, добавить

group: ['name'],

Для этого типа проблемы вы можете отладить, скопировав SQL, сгенерированный с помощью sequelize и вставив его в MySqlWorkbench или что-то подобное, чтобы увидеть, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...