Sequelize(v6)如何直接获取模型定义的列名?
在Sequelize v6中获取模型列名的方法
当然可以,Sequelize模型本身提供了内置属性来获取定义的列名,完全不需要硬编码或者手动遍历模型的属性。
核心方法:利用模型的rawAttributes属性
每个Sequelize模型都自带rawAttributes属性,它是一个对象,键就是你在sequelize.define里定义的列名,值则包含该列的所有配置细节。你可以通过遍历这个对象的键来获取所有列名,再过滤掉不需要的列。
示例代码(以Categories模型为例)
// 假设Categories是已定义好的Sequelize模型 const excludedColumns = ['created_at']; // 需要排除的列 // 获取所有列名并过滤指定列 const columnNames = Object.keys(Categories.rawAttributes).filter(column => { return !excludedColumns.includes(column); }); console.log(columnNames); // 输出除created_at外的所有列名
可选方式:从数据库表结构中获取
如果你只需要数据库中实际存在的物理列(比如要排除虚拟字段),可以使用model.describe()方法,它会直接从数据库拉取表的结构信息:
async function getFilteredColumns(model) { const tableInfo = await model.describe(); const excludedColumns = ['created_at']; return Object.keys(tableInfo).filter(col => !excludedColumns.includes(col)); } // 使用方式 getFilteredColumns(Categories).then(columns => console.log(columns));
注意:rawAttributes包含模型定义的所有字段(包括虚拟字段),而describe()仅返回数据库中实际存在的列,可根据需求选择合适的方式。
内容的提问来源于stack exchange,提问作者DoomBot
相关产品推荐
相关产品推荐

