记录一下ORM Sequelize升级到v5的过程中涉及到的几个地方。
$ npm i sequelize@5
v4是v3与v5的过渡版本,到了v5版本 $ 操作符已经被删除
v5操作符将 $ 操作符替换为了 Op 操作符(eg. $or换为了Op.or)
// index.js
const Sequelize = require("sequelize");
const db = {};
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.Op = Sequelize.Op;
module.exports = db;
// file.js
const models = require(‘./index‘);
const where = {};
// where.$or = [];
where[models.Op.or] = [];
const Sequelize = require("sequelize");
const sequelize = new Sequelize(
db,
user,
pass,
{
dialect: ‘mysql‘,
host,
3306,
define: {
‘underscored‘: true
},
pool: {
max: 30,
min: 1,
idle: 30000
},
logging: env === ‘development‘ ? console.log : false,
benchmark: env === ‘development‘ // 输出日志时打印时间
});
weekMark: {
field: ‘weekMark‘,
type: DataTypes.STRING(20),
allowNull: false
}
v5默认使用驼峰命名
文档中提到underscored可以适用于外键、列、时间戳,但我试的只有列起作用了 O.o
在模型定义的options中可以设置createdAt和updatedAt来设置时间戳的命名
"use strict";
module.exports = function (sequelize, DataTypes) {
return sequelize.define(
"ExpressConfig", {
id: {
type: DataTypes.INTEGER(),
allowNull: false,
primaryKey: true,
autoIncrement: true
}
},{
createdAt: ‘created_at‘,
updatedAt: ‘updated_at‘,
timestamps: true,
freezeTableName:true,
tableName:‘User‘
});
};
外键同样默认使用驼峰命名
使用下划线命名时需要显式设置
UserRole.hasMany(models.User, {
foreignKey: "role_id",
sourceKey: "id"
});
在插入数据时,若值为undefined时,会默认忽略该列,与V4无变化
在查询数据时,若where条件的值为undefined时,会报错(V4中会默认为null)
原文:https://www.cnblogs.com/xpengp/p/12918601.html