使用原始查询从MySQL数据库检索数据时遇到一些麻烦 . 问题是原始数据与sequelize中定义的模型实例之间的映射 . 特别是那些在数据库中强调了名称并在模型中加入了名称的字段 .
我以这种方式定义了Store模型:
sequelize.define('stores', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
...
postalCode: {
type: DataTypes.STRING,
field: 'postal_code',
},
...
}
我使用以下代码从数据库中的例程获取数据:
sequelize.query('CALL get_stores()', {model: Stores, type: sequelize.QueryTypes.RAW}).then(function (stores) {
console.log(stores);
}
根据文档(http://docs.sequelizejs.com/en/latest/docs/raw-queries/),如果我定义选项"model",该函数返回Store的实例而不是原始数据 . 但事实并非如此,对于模型和数据库中名称不同的所有字段(请参阅postalCode - > postal_code),我得到的响应返回一个带有数据库字段名称(postal_code)的对象,而不是那些在model(postalCode) .
我已经尝试使用QueryTypes.SELECT而不是QueryTypes.RAW但没有成功 .
请注意,使用findAll或findOne方法时没有问题 .
1 回答
您可以在查询中设置选项
mapToModel: true
,以指示Sequelize将返回的字段名称转换为您提供的模型中的等效名称 .此功能隐藏在参考文档中:http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-query