精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Sequelize進階 Schema的使用

liguoquan
2025年1月14日 16:53 本文熱度 350
1. Schema使用指南

在 Sequelize 中,模式(Schema)的使用涉及到定義數(shù)據(jù)表的結(jié)構(gòu),包括字段的類型、約束、索引以及默認(rèn)值等。以下是一些高級用法的詳細(xì)敘述:

1. 默認(rèn)值 (Default Values)

在 Sequelize 中,你可以為模型字段設(shè)置默認(rèn)值。這對于當(dāng)記錄被創(chuàng)建而沒有指定某些字段時非常有用。

javascript
代碼解讀
復(fù)制代碼
const User = sequelize.define('user', {  username: {    type: Sequelize.STRING,    defaultValue: 'NewUser'  },  createdAt: {    type: Sequelize.DATE,    defaultValue: Sequelize.NOW  }});

2. 自定義 Getter 和 Setter

Sequelize 允許你定義自定義的 getter 和 setter 方法,這可以用于格式化數(shù)據(jù)或在數(shù)據(jù)保存到數(shù)據(jù)庫之前對其進行加工。

javascript
代碼解讀
復(fù)制代碼
const User = sequelize.define('user', {  firstName: {    type: Sequelize.STRING,    allowNull: false,    get() {      const rawValue = this.getDataValue('firstName');      return rawValue ? rawValue.toUpperCase() : null;    }  },  lastName: {    type: Sequelize.STRING,    set(value) {      this.setDataValue('lastName', value.trim());    }  }});

3. 驗證

Sequelize 允許你在模型級別上添加驗證。這些驗證會在數(shù)據(jù)保存到數(shù)據(jù)庫之前執(zhí)行。

javascript
代碼解讀
復(fù)制代碼
const User = sequelize.define('user', {  email: {    type: Sequelize.STRING,    allowNull: false,    validate: {      isEmail: true    }  }});

4. 虛擬字段 (Virtual Fields)

虛擬字段是不會保存到數(shù)據(jù)庫中的字段,但可以在模型中定義,并且可以像常規(guī)屬性一樣使用。

javascript
代碼解讀
復(fù)制代碼
const User = sequelize.define('user', {  firstName: Sequelize.STRING,  lastName: Sequelize.STRING,  fullName: {    type: Sequelize.VIRTUAL,    get() {      return `${this.firstName} ${this.lastName}`;    }  }});

5. 鉤子 (Hooks)

Sequelize 提供了多種鉤子,允許你在數(shù)據(jù)保存、更新或刪除等操作的不同階段運行自定義邏輯。

javascript
代碼解讀
復(fù)制代碼
const User = sequelize.define('user', {  username: Sequelize.STRING}, {  hooks: {    beforeCreate: (user, options) => {      user.username = user.username.toLowerCase();    }  }});

6. 索引

你可以在模型定義中指定索引,這有助于提高數(shù)據(jù)庫查詢的性能。

javascript
代碼解讀
復(fù)制代碼
const User = sequelize.define('user', {  username: Sequelize.STRING,  email: Sequelize.STRING}, {  indexes: [    {      unique: true,      fields: ['email']    }  ]});

這些高級用法提供了強大的靈活性和控制力,使得 Sequelize 成為一個功能豐富的 ORM(對象關(guān)系映射)工具。通過這些用法,你可以更好地定義和操作你的數(shù)據(jù)模型。

2. Schema常用配置說明

在 Sequelize 中,定義模型時可以為每個字段(屬性)指定多種配置項。以下是一些常見的屬性及其詳細(xì)說明:

1. type

  • 描述: 指定字段的數(shù)據(jù)類型。

  • 示例Sequelize.STRINGSequelize.INTEGERSequelize.DATE 等。

2. defaultValue

  • 描述: 為字段指定默認(rèn)值。

  • 示例defaultValue: Sequelize.NOW 或 defaultValue: 'some default value'。

3. allowNull

  • 描述: 設(shè)置字段是否可以為 null。

  • 示例allowNull: false 表示字段不可為空。

4. unique

  • 描述: 確保字段值在整個表中是唯一的。

  • 示例unique: true 或 unique: 'unique_constraint_name'。

5. primaryKey

  • 描述: 將字段設(shè)置為表的主鍵。

  • 示例primaryKey: true

6. autoIncrement

  • 描述: 對于整數(shù)字段,設(shè)置為自動遞增。

  • 示例autoIncrement: true 通常用于主鍵。

7. validate

  • 描述: 為字段添加驗證規(guī)則。

  • 示例:

    javascript
    代碼解讀
    復(fù)制代碼
    validate: {  isEmail: true,  notEmpty: true}

8. get 和 set

  • 描述: 自定義字段的 getter 和 setter 函數(shù)。

  • 示例:

    javascript
    代碼解讀
    復(fù)制代碼
    get() {  return this.getDataValue('fieldName');},set(value) {  this.setDataValue('fieldName', value);}

9. field

  • 描述: 指定數(shù)據(jù)庫中對應(yīng)的列名稱(如果與模型中的字段名不同)。

  • 示例field: 'column_name_in_database'。

10. references

  • 描述: 用于建立外鍵關(guān)系,指向另一個模型的字段。

  • 示例:

    javascript
    代碼解讀
    復(fù)制代碼
    references: {  model: 'OtherModel',  key: 'id'}

11. onDelete 和 onUpdate

  • 描述: 定義外鍵的級聯(lián)行為。

  • 示例onDelete: 'CASCADE'onUpdate: 'NO ACTION'。

12. comment

  • 描述: 為字段添加注釋。

  • 示例comment: 'This is a comment'。

13. typeValidation

  • 描述: 啟用數(shù)據(jù)類型級別的驗證。

  • 示例typeValidation: true

這些屬性提供了豐富的配置選項,可以讓你詳細(xì)地定義你的數(shù)據(jù)模型,確保數(shù)據(jù)的完整性和正確性。通過合理運用這些屬性,可以創(chuàng)建出既強大又靈活的數(shù)據(jù)庫模式。

3. Sequelize的Schema配合Antd ProTable

要使用 Sequelize 和 Ant Design Pro Table 實現(xiàn)一個集成查詢、篩選、排序和分頁功能的前后端數(shù)據(jù)交互,你需要在前端設(shè)置好 Pro Table,并在后端配置 Sequelize 來處理相應(yīng)的請求。以下是大致的步驟:

后端 (使用 Sequelize)

假設(shè)有一個名為 Item 的 Sequelize 模型,需要創(chuàng)建一個 API 端點來處理前端發(fā)送的請求:

  1. 設(shè)置 Express 路由:

    javascript
    代碼解讀
    復(fù)制代碼
    app.get('/api/items', async (req, res) => {  // 使用 req.query 獲取前端發(fā)送的參數(shù)  const { current, pageSize, sorter, filter } = req.query;  // 處理分頁  const limit = pageSize ? parseInt(pageSize) : 10;  const offset = current ? (current - 1) * limit : 0;  // 處理排序  let order = [];  if (sorter) {    // 假設(shè) sorter 格式為 'field_desc' 或 'field_asc'    const [field, orderType] = sorter.split('_');    order.push([field, orderType.toUpperCase()]);  }  // 處理篩選  // 這里的 filter 處理取決于你的具體邏輯  // 構(gòu)建查詢參數(shù)  const options = {    where: filter,    order: order,    offset: offset,    limit: limit,  };  // 查詢數(shù)據(jù)  try {    const { count, rows } = await Item.findAndCountAll(options);    res.json({      data: rows,      total: count,      success: true,    });  } catch (error) {    res.status(500).send({ message: error.message });  }});

前端 (使用 Ant Design Pro Table)

在前端,需要配置 Pro Table 來發(fā)送合適的請求并展示數(shù)據(jù):

  1. 配置 Pro Table:

    jsx
    代碼解讀
    復(fù)制代碼
    import ProTable from '@ant-design/pro-table';const TableList = () => {  const columns = [    // 定義列    { title: 'Name', dataIndex: 'name', sorter: true, filter: true },    // 更多列...  ];  return (    <ProTable      columns={columns}      request={async (params, sorter, filter) => {        // 處理 params,sorter,filter 以匹配后端 API        const requestParams = {          ...params,          sorter: Object.keys(sorter).length ? `${Object.keys(sorter)[0]}_${sorter[Object.keys(sorter)[0]]}` : '',          filter: filter,        };        // 發(fā)送請求到后端        const response = await fetch('/api/items', {          method: 'GET',          params: requestParams,        });        const data = await response.json();        return {          data: data.data,          success: data.success,          total: data.total,        };      }}      rowKey="id"      pagination={{        pageSize: 10,      }}      search={{        filterType: 'light',      }}    />  );};export default TableList;

這個示例展示了如何在前端使用 Pro Table 發(fā)送請求,并在后端使用 Sequelize 處理這些請求。作為開發(fā)者,你可能需要根據(jù)自己的數(shù)據(jù)模型和業(yè)務(wù)需求調(diào)整篩選和排序的邏輯。通過這種方式,可以構(gòu)建一個強大的、支持查詢、篩選、排序和分頁的數(shù)據(jù)表格。


該文章在 2025/1/15 11:35:21 編輯過
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: BL年下猛烈顶弄H | 国产亚洲区 | 无码精品人妻一区二区三区入口 | 日本妇人成熟A片免费观看视频 | 国产精品a无线 | 亚洲一二三四区视频在线 | 国产偷国产 | 亚洲午夜精品a区 | 亚洲av日韩av永久无码免下载 | 亚洲女同成av人片在线观看 | 好紧再快点好深好爽视频 | 国产精品午夜小视频观看 | 人妻无码中文专区久久av | 小说区亚洲自拍另类 | 亚洲天堂久久久 | 在线观看欧美一区二区三区 | 四虎成人欧美精品在永久在线 | 亚洲国产韩国欧美在线app下载 | 亚洲av无码专区国产不乱码 | 午夜三级精品一区二区 | 亚洲娇小与黑人巨大交 | 欧美国产成人精品二 | 中字幕久久久人妻熟女天美传媒 | 亚洲午夜理论一区二区 | 亚洲熟妇无码八av在线播放 | 成人a毛片在线看免费全部播放 | 精品视频在线观看久久直播锕你懂得 | 亚洲一成a人片在线 | 亚洲精品欧美二区三区中文字幕 | 中文字幕人妻一区二 | 18禁黄久久久aaa片 | 亚洲美女色禁图 | 日韩欧美aⅴ综合 | 无码在线观看高清自拍 | 免费欧洲美女牲交视频 | a级毛片免费完整视频 | 日本成人精品 | 91精品国产自产在线 | 9I免费网站无码 | 91精品国产99久久久久久 | 亚洲免费人成久久 |