📅  最后修改于: 2023-12-03 15:34:56.569000             🧑  作者: Mango
Sequelize 是 Node.js 环境下一个流行的 ORM(Object Relation Mapping)框架。它提供了一些特殊的方法可以帮助开发者优化数据库模型操作,本文将介绍 Sequelize 中的部分特殊方法。
Sequelize 允许在查询期间加载关联数据。可以通过 include
配置来指定与主模型相关联的模型。
const User = sequelize.define('user', { /* ... */ });
const Post = sequelize.define('post', { /* ... */ });
User.hasMany(Post);
User.findAll({
include: [Post]
})
这里可以同时加载多个关联模型。
User.findAll({
include: [Post, Comment]
})
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
属性。
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 });
})
这将确保这两个用户在同一个事务中被创建,如果其中一步操作失败,则整个事务将被回滚。
在 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 文档供开发者参考。