LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Sequelize进阶 Schema的使用

liguoquan
2025年1月14日 16:53 本文热度 82
:Sequelize进阶 Schema的使用


Sequelize进阶 Schema的使用


1. Schema使用指南

在 Sequelize 中,模式(Schema)的使用涉及到定义数据表的结构,包括字段的类型、约束、索引以及默认值等。以下是一些高级用法的详细叙述:

1. 默认值 (Default Values)

在 Sequelize 中,你可以为模型字段设置默认值。这对于当记录被创建而没有指定某些字段时非常有用。

javascript
代码解读
复制代码
const User = sequelize.define('user', {  username: {    type: Sequelize.STRING,    defaultValue: 'NewUser'  },  createdAt: {    type: Sequelize.DATE,    defaultValue: Sequelize.NOW  } });

2. 自定义 Getter 和 Setter

Sequelize 允许你定义自定义的 getter 和 setter 方法,这可以用于格式化数据或在数据保存到数据库之前对其进行加工。

javascript
代码解读
复制代码
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 允许你在模型级别上添加验证。这些验证会在数据保存到数据库之前执行。

javascript
代码解读
复制代码
const User = sequelize.define('user', {  email: {    type: Sequelize.STRING,    allowNull: false,    validate: {      isEmail: true    }  } });

4. 虚拟字段 (Virtual Fields)

虚拟字段是不会保存到数据库中的字段,但可以在模型中定义,并且可以像常规属性一样使用。

javascript
代码解读
复制代码
const User = sequelize.define('user', {  firstName: Sequelize.STRING,  lastName: Sequelize.STRING,  fullName: {    type: Sequelize.VIRTUAL,    get() {      return `${this.firstName} ${this.lastName}`;    }  } });

5. 钩子 (Hooks)

Sequelize 提供了多种钩子,允许你在数据保存、更新或删除等操作的不同阶段运行自定义逻辑。

javascript
代码解读
复制代码
const User = sequelize.define('user', {  username: Sequelize.STRING }, {  hooks: {    beforeCreate: (user, options) => {      user.username = user.username.toLowerCase();    }  } });

6. 索引

你可以在模型定义中指定索引,这有助于提高数据库查询的性能。

javascript
代码解读
复制代码
const User = sequelize.define('user', {  username: Sequelize.STRING,  email: Sequelize.STRING }, {  indexes: [    {      unique: true,      fields: ['email']    }  ] });

这些高级用法提供了强大的灵活性和控制力,使得 Sequelize 成为一个功能丰富的 ORM(对象关系映射)工具。通过这些用法,你可以更好地定义和操作你的数据模型。

2. Schema常用配置说明

在 Sequelize 中,定义模型时可以为每个字段(属性)指定多种配置项。以下是一些常见的属性及其详细说明:

1. type

  • 描述: 指定字段的数据类型。
  • 示例Sequelize.STRINGSequelize.INTEGERSequelize.DATE 等。

2. defaultValue

  • 描述: 为字段指定默认值。
  • 示例defaultValue: Sequelize.NOW 或 defaultValue: 'some default value'

3. allowNull

  • 描述: 设置字段是否可以为 null
  • 示例allowNull: false 表示字段不可为空。

4. unique

  • 描述: 确保字段值在整个表中是唯一的。
  • 示例unique: true 或 unique: 'unique_constraint_name'

5. primaryKey

  • 描述: 将字段设置为表的主键。
  • 示例primaryKey: true

6. autoIncrement

  • 描述: 对于整数字段,设置为自动递增。
  • 示例autoIncrement: true 通常用于主键。

7. validate

  • 描述: 为字段添加验证规则。
  • 示例:
    javascript
    代码解读
    复制代码
    validate: {  isEmail: true,  notEmpty: true }

8. get 和 set

  • 描述: 自定义字段的 getter 和 setter 函数。
  • 示例:
    javascript
    代码解读
    复制代码
    get() {  return this.getDataValue('fieldName'); }, set(value) {  this.setDataValue('fieldName', value); }

9. field

  • 描述: 指定数据库中对应的列名称(如果与模型中的字段名不同)。
  • 示例field: 'column_name_in_database'

10. references

  • 描述: 用于建立外键关系,指向另一个模型的字段。
  • 示例:
    javascript
    代码解读
    复制代码
    references: {  model: 'OtherModel',  key: 'id' }

11. onDelete 和 onUpdate

  • 描述: 定义外键的级联行为。
  • 示例onDelete: 'CASCADE'onUpdate: 'NO ACTION'

12. comment

  • 描述: 为字段添加注释。
  • 示例comment: 'This is a comment'

13. typeValidation

  • 描述: 启用数据类型级别的验证。
  • 示例typeValidation: true

这些属性提供了丰富的配置选项,可以让你详细地定义你的数据模型,确保数据的完整性和正确性。通过合理运用这些属性,可以创建出既强大又灵活的数据库模式。

3. Sequelize的Schema配合Antd ProTable

要使用 Sequelize 和 Ant Design Pro Table 实现一个集成查询、筛选、排序和分页功能的前后端数据交互,你需要在前端设置好 Pro Table,并在后端配置 Sequelize 来处理相应的请求。以下是大致的步骤:

后端 (使用 Sequelize)

假设有一个名为 Item 的 Sequelize 模型,需要创建一个 API 端点来处理前端发送的请求:

  1. 设置 Express 路由:
    javascript
    代码解读
    复制代码
    app.get('/api/items', async (req, res) => {  // 使用 req.query 获取前端发送的参数  const { current, pageSize, sorter, filter } = req.query;  // 处理分页  const limit = pageSize ? parseInt(pageSize) : 10;  const offset = current ? (current - 1) * limit : 0;  // 处理排序  let order = [];  if (sorter) {    // 假设 sorter 格式为 'field_desc' 或 'field_asc'    const [field, orderType] = sorter.split('_');    order.push([field, orderType.toUpperCase()]);  }  // 处理筛选  // 这里的 filter 处理取决于你的具体逻辑  // 构建查询参数  const options = {    where: filter,    order: order,    offset: offset,    limit: limit,  };  // 查询数据  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 来发送合适的请求并展示数据:

  1. 配置 Pro Table:
    jsx
    代码解读
    复制代码
    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,        };        // 发送请求到后端        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 发送请求,并在后端使用 Sequelize 处理这些请求。作为开发者,你可能需要根据自己的数据模型和业务需求调整筛选和排序的逻辑。通过这种方式,可以构建一个强大的、支持查询、筛选、排序和分页的数据表格。


该文章在 2025/1/14 16:53:03 编辑过
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved