【问题标题】:Prevent Sequelize Join from returning primary key of include table防止 Sequelize Join 返回包含表的主键
【发布时间】:2021-09-03 03:42:19
【问题描述】:

我有一个 sequelize 查询,它呈现正确的 SQL 语句,但它会返回连接表的主键。由于此查询使用 Group By 附加字段是不可接受的,但我不确定如何删除它。

userDB.tblUsers.belongsTo(userDB.tblSMSSent, { foreignKey: 'collector', targetKey: 'user' });
    userDB.tblSMSSent.hasMany(userDB.tblUsers);

    let users = await userDB.tblUsers.findAll({
        attributes: ['collector', 'tblUsers.id'],
        include: {
            model: userDB.tblSMSSent,
            as: 'tblSMSSent',
            attributes: [[sequelize.fn('COUNT', 'tblSMSSent.id'), 'numMessages']]
        },
        group: ['tblUsers.collector', 'tblUsers.id'],
        logging: console.log
    })

呈现的SQL是这样的:

SELECT 
    [tblUsers].[collector], 
    [tblUsers].[id], 
    [tblSMSSent].[id] AS [tblSMSSent.id], 
    COUNT(N'tblSMSSent.id') AS [tblSMSSent.numMessages] 
FROM [dbo].[tblUsers] AS [tblUsers] LEFT OUTER JOIN [dbo].[tblSMSSent] AS [tblSMSSent] ON [tblUsers].[collector] = [tblSMSSent].[user] 
GROUP BY [tblUsers].[collector], [tblUsers].[id];

我需要这个不包括 tblSMSSent.id 的查询。我已尝试在包含属性中使用this article 中所述的exclude: tblSMSSent.id,但这也没有成功。我如何才能正确地从我的查询中排除该列?

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    在发送到续集的 JSON 中添加了raw:true 标签。这强制只包含必填字段而没有主键。

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2016-05-06
      • 2020-08-02
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多