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列。
所以这是不可能的。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)
希望这也能帮助任何陷入困境的人。