如何将原始查询转换为ORM序列化

时间:2019-02-26 08:52:42

标签: mysql node.js orm sequelize.js

模型之间的关系如下:

我有三个表StaffModulesTests

  • 员工(多对多)模块
  • 模块(一对多)测试

这是我的原始查询:

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复制它,但是它不起作用:

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 :(得分:0)

也许在这种情况下使用原始查询的可能性? (http://docs.sequelizejs.com/manual/tutorial/raw-queries.html)[我会发表评论,只是没有足够的声誉]

答案 1 :(得分:0)

尝试遵循findAll模块中的属性-

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

仅显示测试计数可以添加staffModules的属性。