【问题标题】:Sequelize Include Model But Without Tablename续集包括模型但没有表名
【发布时间】:2025-12-02 23:05:02
【问题描述】:

我是 Sequelize 的新手

我对“嵌套急切加载”有疑问

我有 2 个具有一对多关系的表

  1. 评论表

  2. 用户表

我使用此代码进行查询

Comment.findAll({
   include: [User]
})

我明白了

{
    id: 1,
    comment: "test",
    user: {
       id: 3,
       name: "someone"
    }
}

但我期待这样的结果

{
    id: 1,
    comment: "test",
    user_id: 3,
    user_name: "someone"
}

我阅读了几篇 * 帖子,它有一个解决方案,但适用于 3.3 版

Comment.findAll({
   attributes: ['id', 'name', ['user.id','user_id'], ['user.name','user_name']]
   include: [{ model: User, attributes:[], nested: false, required: true }]
})
Comment.findAll({
   attributes: ['id', 'name', [Sequelize.col('user.id'),'user_id'], [Sequelize.col('user.name'),'user_name']]
   include: [{ model: User, attributes:[], nested: false, required: true }]
})

但这对我不起作用。

现在我用 sequelize 5.5.1 怎么实现呢。

有人可以帮我吗?

我的女朋友刚刚伤透了我的心。只有你能回答这个问题来治愈我的心。

【问题讨论】:

  • 你找到解决这个问题的方法了吗?
  • @Kiax 不,但我使用的方式是改变我的前端。

标签: javascript node.js express sequelize.js sequelize-cli


【解决方案1】:

您可以使用此代码获得所需的输出:

由于 Sequelize 是基于 promise 的,所以推荐使用 then 和 catch。

Comment.findAll({
   include: [User]
}).then(result=>
{
  let obj=
{
    id: result.item,
    comment: result.comment,
    user_id: result.user.id,
    user_name: result.user.name
};
console.log(JSON.stringify(obj));

}).catch(err=>
{
console.log(err);
});

【讨论】: