第二節(jié) 創(chuàng)建數(shù)據(jù)模型

創(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容