用关联包括ID分组

Tik*_*kes 5 group-by sequelize.js

因此,当从续集请求分组时,如下所示:

return models.WorkingCalendar
            .findAll({
                attributes: [
                    'WorkingCalendar.PeriodId',
                    'WorkingCalendar.date',
                    'Period.name'
                ],
                include: [
                    {
                        model: models.Period,
                        attributes: []
                    }
                ],
                where: {
                    GetSudoId: currentGetsudo.id,
                    UnitPlantId: unitPlantId
                },
                group: ['WorkingCalendar.PeriodId',
                    'WorkingCalendar.date',
                    'Period.name'],
            });
Run Code Online (Sandbox Code Playgroud)

Sequelize将运行以下查询:

SELECT 
[WorkingCalendar].[id],
[WorkingCalendar].[PeriodId], 
[WorkingCalendar].[date], 
[Period].[name] 
FROM [WorkingCalendars] AS [WorkingCalendar] 
LEFT OUTER JOIN [Periods] AS [Period] ON [WorkingCalendar].[PeriodId] = [Period].[id] 
WHERE [WorkingCalendar].[GetSudoId] = 1 AND [WorkingCalendar].[UnitPlantId] = N'1' 
GROUP BY [WorkingCalendar].[PeriodId], [WorkingCalendar].[date], [Period].[name];
Run Code Online (Sandbox Code Playgroud)

但是我从来没有要求过,WorkingCalender.id而且我似乎也不能摆脱它。我如何确保续集不会让我id从中得到这个workingCalendar

我已经发现,对于关联,属性应该是一个空数组,并且对主对象无效,因为我只需要3列。

Tik*_*kes 1

所以这是不可能的。ORM 需要与数据库建立关系,这是通过 id 完成的;如果没有 id 就不可能得到这个。

但是,您可以做的是使用sequelize 执行原始查询。

IE

return models.sequelize.query(
    `SELECT 
    [WorkingCalendar].[id],
    [WorkingCalendar].[PeriodId], 
    [WorkingCalendar].[date], 
    [Period].[name] 
    FROM [WorkingCalendars] AS [WorkingCalendar] 
    LEFT OUTER JOIN [Periods] AS [Period] ON [WorkingCalendar].[PeriodId] = [Period].[id] 
    WHERE [WorkingCalendar].[GetSudoId] = :getsudoId AND [WorkingCalendar].[UnitPlantId] = N'1' 
    GROUP BY [WorkingCalendar].[PeriodId], [WorkingCalendar].[date], [Period].[name]`,
    {
        replacements: { getsudoId: getsudoId },
        type: models.Sequelize.QueryTypes.SELECT
    }
)
Run Code Online (Sandbox Code Playgroud)

希望这也能帮助任何陷入困境的人。