創(chuàng)建數(shù)據(jù)模型前最好先看看mysql的數(shù)據(jù)類型,點(diǎn)擊這里看
1. sequelize 數(shù)據(jù)類型和mysql 對照,具體詳情請自行學(xué)習(xí)
| sequelize 數(shù)據(jù)類型 | mysql 數(shù)據(jù)類型 | 長度 | 解析 |
|---|---|---|---|
| STRING | varchar | n | 可變字符串 |
| STRING(20) | varchar(20) | 20 | 置頂長度的字符串 |
| TEXT | text | n | 文本 |
| TEXT('tiny') | tinytext | n | 小型文本 |
| TEXT('long') | longtext | n | 長文本 |
| INTEGER | int | 4 | 整數(shù) |
| BIGINT | bigint | 8 | 長整數(shù) |
| FLOAT | float | 4 | 浮點(diǎn)數(shù) |
| FLOAT(5,2) | float(5,2) | 4 | 確定精度浮點(diǎn)數(shù) |
| DOUBLE | double | 8 | 雙精度 |
| DOUBLE(10,2) | double(10,2) | 8 | 確定精度雙精度類型 |
| DECIMAL(m,d) | decimal | m>d?m+2:d+2 | 小數(shù),常用于存儲(chǔ)貨幣 |
| DATE | datetime | 8 | 日期時(shí)間 年月日時(shí)分秒 |
| DATEONLY | date | 3 | 日期 年月日 |
| BOOLEAN | tinyint | 1 | 布爾 mysql 是沒有bool類型的 |
| JSON | json | n | json對象 |
| UUIDV1/UUIDV4 | char(36) | 36 | 自動(dòng)生成36位隨機(jī)數(shù),常用于id和唯一標(biāo)識(shí)符 |
2. 創(chuàng)建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, // 自動(dòng)創(chuàng)建時(shí)間 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, // 自動(dòng)創(chuàng)建時(shí)間 createdAt,updateAt,deleteAt
paranoid: true, // 軟刪除,依賴timestamp = true
}
);
// 關(guān)聯(lián),如果多個(gè)外鍵關(guān)聯(lián)一個(gè)表,請加入as參數(shù)
Admin.associate = function () {
app.model.models.Admin.belongsTo(app.model.models.Role, {
foreignKey: 'role',
targetKey: 'id',
constraints: false, // 是否同步外鍵關(guān)系,即強(qiáng)制外鍵關(guān)聯(lián)
// as:'role'
});
};
return Admin;
};
3. 同步數(shù)據(jù)庫
執(zhí)行內(nèi)置命令
npm run asyncdb