首页 文章

Sequelize:原始数据和模型之间的映射

提问于
浏览
2

使用原始查询从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 回答

  • 0

    您可以在查询中设置选项 mapToModel: true ,以指示Sequelize将返回的字段名称转换为您提供的模型中的等效名称 .

    const User = sequelize.define('user', {
      userId: {
      field: 'user_id',
      type: DataTypes.BIGINT,
      primaryKey: true
    })
    
    sequelize.query(
      'select user_id from user where user_id > 1000',
      {
        mapToModel: true,
        model: User
      }
    )
    

    此功能隐藏在参考文档中:http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-query

相关问题