【问题标题】:sequelize - what is the difference between raw:true and raw:falsesequelize - raw:true 和 raw:false 有什么区别
【发布时间】:2021-08-04 09:03:05
【问题描述】:

根据doc

如果 options.raw

如果设置为 true,字段和虚拟设置器将被忽略

但是字段和虚拟设置器的含义是什么?
我看过很多网站,但是当options.raw 的值为真/假时,查询结果的格式似乎没有示例。

假设我在 Sequelize 中创建了 users 模型

const Sequelize = require('sequelize');
const DataTypes = Sequelize.DataTypes;
const db = require('../sequelize')

let users = db.define('users', {
    id: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4,
      allowNull: false,
      primaryKey: true
    },
    email: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: 'email'
    },
    password: {
      type: DataTypes.STRING,
    },
  },
  {
    hooks: {
      beforeCount(options) {
        options.raw = true;  // what would be the difference when I set it to false
      }
    }
  }
);
  
users.sync().then(() => {
console.log('user table created');
});

module.exports = users;

当我将options.raw 设置为 false 时会有什么不同?
有什么例子吗?

【问题讨论】:

标签: mysql node.js express sequelize.js


【解决方案1】:

Doc

在其最基本的形式中,set 将更新存储在底层 dataValues 对象中的值。但是,如果为键定义了自定义 setter 函数,则会调用该函数。要绕过 setter,您可以在 options 对象中传递 raw: true。

如果 raw 为真,自定义的 getter 和 setter 将被忽略。

require('sqlite3');
const { Sequelize, DataTypes } = require('sequelize');

const sequelize = new Sequelize('sqlite::memory:')

const User = sequelize.define('User', {
  firstName: {
    type: DataTypes.STRING,
    get() {
        return this.getDataValue('firstName').toUpperCase()
    }
  },
  lastName: {
    type: DataTypes.STRING,
    set(value) {
        this.setDataValue('lastName', value + '--------');
    }
  }
});

let user = User.build({ firstName: 'John', lastName: 'Doe' });
console.log(user.lastName); // Doe--------
console.log(user.get()) // {firstName: "JOHN", id: null, lastName: "Doe--------"}

user = User.build({ firstName: 'John', lastName: 'Doe' }, {raw: true});
console.log(user.lastName); // Doe
console.log(user.get({raw: true})) // {firstName: "John", id: null, lastName: "Doe"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    相关资源
    最近更新 更多