如何在Sequelize中查询全列并为指定列设置别名?
Sequelize实现查询所有列并指定列别名
要实现你需要的select *, processor_txn_id as processor_id from transaction效果,Sequelize可以通过findAll方法的attributes参数完成,以下是两种可行写法:
写法一:直接指定列名与别名(适用于模型字段名与数据库列名一致的场景)
// 假设已定义Transaction模型 Transaction.findAll({ attributes: [ '*', // 查询所有列 ['processor_txn_id', 'processor_id'], // 给processor_txn_id设置别名 ['target_second_column', 'second_alias'] // 第二列的别名设置 ] });
写法二:使用sequelize.col指定数据库列名(通用场景,适配模型字段与数据库列名不一致的情况)
如果你的模型字段用了驼峰命名(比如模型里是processorTxnId,对应数据库的processor_txn_id),建议用sequelize.col明确指定数据库列名,避免出错:
const { sequelize, Transaction } = require('./models'); // 引入sequelize实例和模型 async function fetchTransactions() { const result = await Transaction.findAll({ attributes: [ '*', [sequelize.col('processor_txn_id'), 'processor_id'], [sequelize.col('second_db_column'), 'second_alias'] ] }); return result; }
说明
- 以上写法生成的SQL与你需求完全一致:会先查询表中所有列,同时将指定列以别名形式返回(原列和别名列都会出现在结果中,和原生SQL行为一致)。
- 如果希望只保留别名列、不返回原列,需要去掉
'*',并显式列出所有其他需要的字段,再给目标字段设置别名。
内容的提问来源于stack exchange,提问作者Sarthak
相关产品推荐
相关产品推荐

