2016-07-06 79 views
3

所以从sequelize请求组通过时,如下:Sequelize组通过与协会包括ID

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'], 
      }); 

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]; 

但我从来没有要求的WorkingCalender.id和我似乎无法摆脱这一点。 我如何确定sequelize没有从workingCalendar这个id

我已经发现,对于关联,属性应该是一个空数组,并且可以工作,但不适用于主对象,因为我只需要3列。

回答

0

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

然而,你可以做的是做一个带有后缀的原始查询。

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 
    } 
) 

希望这有助于任何人都挣扎过。