Как я могу преобразовать этот необработанный запрос для секвелирования ORM - PullRequest
0 голосов
/ 26 февраля 2019

Отношения между моделями таковы:

У меня есть три таблицы Staff, Modules, Tests

  • Модули персонала (многие ко многим)
  • Тесты модулей (один ко многим)

Это мой необработанный запрос:

select *,count(distinct tests.testId),count(distinct staffModules.id) from modules 
left join tests on modules.moduleId = tests.moduleModuleId 
left join staffModules on modules.moduleId = staffModules.moduleModuleId
group by modules.moduleId
LIMIT 5 OFFSET 0

Я пытался реплицировать его с помощью Sequelize ORM, но это неt работа:

let resultModules = await modules.findAll({
            attributes: ['moduleName'],
            include: [{
                model: staff,
                attributes:['staffName'],
                through: { attributes: [[sequelize.fn('COUNT', sequelize.col('staffStaffId')), 'staffCount']] },
             },
             {
                 model: tests,
                 attributes:['testsTaken','testsCompleted','testName'],
             }
        ],
        limit:parseInt(limit),offset:parseInt(offset),
        });

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Попробуйте следующие атрибуты в модулях findAll -

    attributes: [
        "moduleName",
        [Sequelize.literal("(SELECT count(DISTICT testId) FROM tests T WHERE (CONDITION) )"), "testIdCount"]
    ] 

Атрибут для staffModules может быть добавлен только при отображении количества тестов.

0 голосов
/ 26 февраля 2019

Может быть, использовать возможность необработанных запросов для подобных ситуаций?(http://docs.sequelizejs.com/manual/tutorial/raw-queries.html) [Я бы прокомментировал это, просто не хватает репутации]

...