如何在Sequelize关联查询后修改属性名称?
解决Sequelize关联查询后role字段扁平化的问题
方法一:通过查询配置直接返回平级字段
利用Sequelize的attributes配置关联字段别名,配合raw: true直接生成期望的结构:
const { sequelize } = require('./path-to-sequelize-instance'); const user = await User.findAll({ attributes: [ 'id', 'username', 'password', // 将Role表的name字段别名成role [sequelize.col('Role.name'), 'role'] ], include: [ { model: Role, attributes: [], // 不返回嵌套的Role对象 required: true } ], raw: true, plain: true });
此方式会让查询结果直接把role字段设为对应的name值,无需后续额外处理。
方法二:查询后手动转换结构
如果不想修改原有查询逻辑,可以在获取结果后手动解构重组数据:
const user = await User.findAll({ include: [ { model: Role, attributes: ["name"], required: true } ], plain: true }); // 转换结构 const { role, ...userData } = user.toJSON(); // plain: true时也可直接使用user,无需toJSON const transformedUser = { ...userData, role: role.name };
这种方法适合需要保留原有查询逻辑,仅对结果做结构调整的场景。
内容的提问来源于stack exchange,提问作者any-1507
相关产品推荐
相关产品推荐

