创建数据模型前最好先看看mysql的数据类型,点击这里看
1. sequelize 数据类型和mysql 对照,具体详情请自行学习
sequelize 数据类型 | mysql 数据类型 | 长度 | 解析 |
---|---|---|---|
STRING | varchar | n | 可变字符串 |
STRING(20) | varchar(20) | 20 | 置顶长度的字符串 |
TEXT | text | n | 文本 |
TEXT('tiny') | tinytext | n | 小型文本 |
TEXT('long') | longtext | n | 长文本 |
INTEGER | int | 4 | 整数 |
BIGINT | bigint | 8 | 长整数 |
FLOAT | float | 4 | 浮点数 |
FLOAT(5,2) | float(5,2) | 4 | 确定精度浮点数 |
DOUBLE | double | 8 | 双精度 |
DOUBLE(10,2) | double(10,2) | 8 | 确定精度双精度类型 |
DECIMAL(m,d) | decimal | m>d?m+2:d+2 | 小数,常用于存储货币 |
DATE | datetime | 8 | 日期时间 年月日时分秒 |
DATEONLY | date | 3 | 日期 年月日 |
BOOLEAN | tinyint | 1 | 布尔 mysql 是没有bool类型的 |
JSON | json | n | json对象 |
UUIDV1/UUIDV4 | char(36) | 36 | 自动生成36位随机数,常用于id和唯一标识符 |
2. 创建model模型
- 角色表
// role.js
'use strict';
module.exports = app => {
const { INTEGER, STRING } = app.Sequelize;
const Role = app.model.define(
'Role',
{
id: {
type: INTEGER,
autoIncrement: true, // 自增
primaryKey: true, // 主键
},
name: {
type: STRING(10),
allowNull: false,
comment: '角色名称', // 备注
},
auths: {
type: STRING,
allowNull:true,
defaultValue: '',
comment: '角色列表',
}
},
{
freezeTableName: true, // 允许自定义表名
tableName: 'test_role', // 表名
timestamp: true, // 自动创建时间 createdAt,updateAt,deleteAt
paranoid: true, // 软删除,依赖timestamp = true
}
);
return Role;
};
- 用户表
// admin.js
'use strict';
module.exports = app => {
const { INTEGER, STRING, BOOLEAN, DATE } = app.Sequelize;
const Admin = app.model.define(
'Admin',
{
id: {
type: INTEGER,
autoIncrement: true, // 自增
primaryKey: true, // 主键
},
name: {
type: STRING(10),
allowNull: false,
comment: '用户名称', // 备注
},
logname: {
type: STRING,
defaultValue: false,
comment: '登录名',
},
password: {
type: STRING,
defaultValue: false,
comment: '密码',
},
role: {
type: INTEGER,
allowNull: false,
comment: '角色外键'
},
isActive: {
type: BOOLEAN,
defaultValue: true,
allowNull: false,
comment: '是否启用'
}
},
{
freezeTableName: true, // 允许自定义表名
tableName: 'test_admin', // 表名
timestamp: true, // 自动创建时间 createdAt,updateAt,deleteAt
paranoid: true, // 软删除,依赖timestamp = true
}
);
// 关联,如果多个外键关联一个表,请加入as参数
Admin.associate = function () {
app.model.models.Admin.belongsTo(app.model.models.Role, {
foreignKey: 'role',
targetKey: 'id',
constraints: false, // 是否同步外键关系,即强制外键关联
// as:'role'
});
};
return Admin;
};
3. 同步数据库
执行内置命令
npm run asyncdb