📜  sequelize 特殊方法 (1)

📅  最后修改于: 2023-12-03 15:34:56.569000             🧑  作者: Mango

Sequelize 特殊方法

Sequelize 是 Node.js 环境下一个流行的 ORM(Object Relation Mapping)框架。它提供了一些特殊的方法可以帮助开发者优化数据库模型操作,本文将介绍 Sequelize 中的部分特殊方法。

1. 加载关联模型

Sequelize 允许在查询期间加载关联数据。可以通过 include 配置来指定与主模型相关联的模型。

const User = sequelize.define('user', { /* ... */ });
const Post = sequelize.define('post', { /* ... */ });

User.hasMany(Post);

User.findAll({
  include: [Post]
})

这里可以同时加载多个关联模型。

User.findAll({
  include: [Post, Comment]
})
2. 聚合查询

Sequelize 支持各种聚合函数,如 COUNT, MAX, MIN, AVG, 和 SUM。可以使用 sequelize.col 方法表示一列数据,用于聚合查询。

const { col, fn, Op } = require('sequelize');

User.findAll({
  attributes: [
    [fn('COUNT', col('id')), 'numUsers']
  ],
  group: ['status'],
  where: {
    status: {
      [Op.eq]: 'active'
    }
  }
})

这段代码会返回一个对象数组,每个对象包含用于聚合查询计算得到的 numUsers 属性。

3. 事务管理

Sequelize 提供了一个 transaction 方法,可以使用它来启动一个事务。

sequelize.transaction(async (transaction) => {
  await User.create({
    username: 'john.doe',
    password: 'p@ssw0rd'
  }, { transaction });
  await User.create({
    username: 'jane.doe',
    password: 'p@ssw0rd'
  }, { transaction });
})

这将确保这两个用户在同一个事务中被创建,如果其中一步操作失败,则整个事务将被回滚。

4. 自定义数据类型

在 Sequelize 中,可以通过 sequelize.define 声明模型时定义自定义数据类型。

const { DataTypes } = require('sequelize');

const User = sequelize.define('user', {
  lastLogin: {
    type: DataTypes.DATE,
    defaultValue: DataTypes.NOW
  },
  name: {
    type: DataTypes.STRING
  }
});

在上面的例子中,我们定义了一个名为 lastLogin 的自定义数据类型,其类型为 DATE,默认值为当前时间。

结论

上面只是挑选了一些 Sequelize 中的特殊方法,Sequelize 提供的功能非常丰富,开发者可以根据自己的需求灵活使用。Sequelize 的官方文档也提供了详细的 API 文档供开发者参考。