人妻夜夜爽天天爽三区丁香花-人妻夜夜爽天天爽三-人妻夜夜爽天天爽欧美色院-人妻夜夜爽天天爽免费视频-人妻夜夜爽天天爽-人妻夜夜爽天天

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

Sequelize進(jìn)階 Schema的使用

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

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

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

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

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ù)庫之前對(duì)其進(jìn)行加工。

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. 驗(yàn)證

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

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

4. 虛擬字段 (Virtual Fields)

虛擬字段是不會(huì)保存到數(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ù)保存、更新或刪除等操作的不同階段運(yùn)行自定義邏輯。

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']    }  ]});

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

2. Schema常用配置說明

在 Sequelize 中,定義模型時(shí)可以為每個(gè)字段(屬性)指定多種配置項(xiàng)。以下是一些常見的屬性及其詳細(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

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

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

5. primaryKey

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

  • 示例primaryKey: true

6. autoIncrement

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

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

7. validate

  • 描述: 為字段添加驗(yàn)證規(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ù)庫中對(duì)應(yīng)的列名稱(如果與模型中的字段名不同)。

  • 示例field: 'column_name_in_database'

10. references

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

  • 示例:

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

11. onDelete 和 onUpdate

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

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

12. comment

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

  • 示例comment: 'This is a comment'

13. typeValidation

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

  • 示例typeValidation: true

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

3. Sequelize的Schema配合Antd ProTable

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

后端 (使用 Sequelize)

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

  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ā)送合適的請(qǐng)求并展示數(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ā)送請(qǐng)求到后端        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;

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


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

主站蜘蛛池模板: 麻豆女神列表 | 真实国产老熟女无套中 | 亚洲区码一码二码高高 | av在线播放不卡一区二区三区 | 久久久91人妻无码精品 | 国产一区二区影院 | 亚洲五月婷婷 | 国产丝袜在线精品丝袜不卡 | 日本18~20岁牲交视频 | 无码av动漫精品一区二区免费 | 久久99精品久久久久久水蜜 | 2024伊人查蕉在线观看 | 色噜噜狠狠色综合日日 | 欧美人妻无码A级视频 | 91久久久精品国产一区二区蜜臀 | 亚洲国产精品嫩草影院在线观看 | 久久久久国产精品免费免费搜 | 欧美网红一区二区在线播放 | 不卡一区二区三区在线视频 | 国产精品51麻豆CM传媒 | 久久久久久精品国产观看 | 狠狠色成人一区二区三区 | 无码一区二区三区亚洲人妻 | 久久久久综合国产欧美一区二区 | 久久精品综合视频 | 亚洲日韩日本一区二区 | 国产乱子乱人伦电影在线观看 | 国产精品无码专区第一页 | 久久精品国产v曰韩v亚洲爆乳 | 日韩精品一区二区三区四区 | 无码av一级毛片在线播放 | 国产亚洲欧美另类一区二区三区 | 香蕉久久综合永久入口导航 | 日本一区二区三区免费看 | 好比天天日天天干图 | 欧美日韩一区二区三区四区在线观看 | 亚洲欧美春色激情另类 | 日韩不卡在线视频 | 精品久久一区二区三区 | 国产激情无码激情A片小说 国产激情无码一区二区 | 自拍视频91 |