前言
Sequelize 是 Node.js 中一种流行的 ORM(Object-Relational Mapping)框架,它提供了一种将关系型数据库中的数据映射为 JavaScript 对象的方式,从而简化了数据库操作的复杂度。本文将重点介绍 Sequelize 中的 Model(模型)基础知识,包括 Model 的定义、属性设置、关联关系配置等。
Model 的定义
在 Sequelize 中,Model 代表了数据库中的一个表,它是一个 JavaScript 类,用于描述表的结构和操作。Model 的定义一般放在一个单独的文件中,可以通过 sequelize.define()
方法进行定义。下面是一个简单的例子:
// javascriptcn.com 代码示例 const { Sequelize, DataTypes } = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql' }); const User = sequelize.define('User', { // 定义模型属性 firstName: { type: DataTypes.STRING, allowNull: false }, lastName: { type: DataTypes.STRING // allowNull 默认为 true } }, { // 这是其他模型参数 });
在上面的例子中,我们定义了一个名为 User
的 Model,它对应了数据库中的一个名为 users
的表。我们使用 sequelize.define()
方法定义了 User
Model 的属性,其中 firstName
和 lastName
分别对应了表中的两个字段。DataTypes.STRING
表示这两个字段的类型为字符串,allowNull
表示这两个字段是否允许为空。在定义 Model 的时候,还可以设置其他的参数,例如表名、时间戳、索引等。
属性设置
在 Sequelize 中,Model 的属性设置是非常灵活的,可以设置各种类型的属性,例如字符串、数字、日期、布尔值、JSON 对象等。下面是一些常用的属性设置:
字符串类型
// javascriptcn.com 代码示例 const User = sequelize.define('User', { firstName: { type: DataTypes.STRING, allowNull: false }, lastName: { type: DataTypes.STRING // allowNull 默认为 true }, email: { type: DataTypes.STRING, unique: true }, password: { type: DataTypes.STRING, validate: { len: [6, 20] } } });
在上面的例子中,我们定义了一个名为 User
的 Model,它包含了四个字符串类型的属性:firstName
、lastName
、email
和 password
。其中,email
属性设置了 unique: true
,表示该属性的值必须唯一;password
属性设置了 validate
,表示该属性的值必须符合指定的规则。
数字类型
// javascriptcn.com 代码示例 const User = sequelize.define('User', { age: { type: DataTypes.INTEGER, defaultValue: 0 }, height: { type: DataTypes.FLOAT }, weight: { type: DataTypes.DECIMAL(10, 2) } });
在上面的例子中,我们定义了一个名为 User
的 Model,它包含了三个数字类型的属性:age
、height
和 weight
。其中,age
属性设置了默认值为 0,weight
属性设置了精度为 10 位,小数点后有 2 位。
日期类型
// javascriptcn.com 代码示例 const User = sequelize.define('User', { birthday: { type: DataTypes.DATE }, createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW } });
在上面的例子中,我们定义了一个名为 User
的 Model,它包含了三个日期类型的属性:birthday
、createdAt
和 updatedAt
。其中,createdAt
和 updatedAt
属性设置了默认值为当前时间。
布尔类型
const User = sequelize.define('User', { isActive: { type: DataTypes.BOOLEAN, defaultValue: true } });
在上面的例子中,我们定义了一个名为 User
的 Model,它包含了一个布尔类型的属性:isActive
。其中,isActive
属性设置了默认值为 true。
JSON 类型
const User = sequelize.define('User', { preferences: { type: DataTypes.JSON } });
在上面的例子中,我们定义了一个名为 User
的 Model,它包含了一个 JSON 类型的属性:preferences
。该属性可以存储任意的 JSON 对象。
关联关系配置
在 Sequelize 中,Model 之间可以建立多种不同的关联关系,例如一对一、一对多、多对多等。下面是一些常用的关联关系配置:
一对一关系
// javascriptcn.com 代码示例 const User = sequelize.define('User', { // ... }); const Profile = sequelize.define('Profile', { // ... }); User.hasOne(Profile); Profile.belongsTo(User);
在上面的例子中,我们定义了两个 Model:User
和 Profile
。它们之间建立了一对一的关系,即一个用户对应一个个人资料,一个个人资料也对应一个用户。我们使用 User.hasOne(Profile)
方法和 Profile.belongsTo(User)
方法分别定义了两个 Model 之间的关联关系。
一对多关系
// javascriptcn.com 代码示例 const User = sequelize.define('User', { // ... }); const Post = sequelize.define('Post', { // ... }); User.hasMany(Post); Post.belongsTo(User);
在上面的例子中,我们定义了两个 Model:User
和 Post
。它们之间建立了一对多的关系,即一个用户可以发布多篇文章,一篇文章只能由一个用户发布。我们使用 User.hasMany(Post)
方法和 Post.belongsTo(User)
方法分别定义了两个 Model 之间的关联关系。
多对多关系
// javascriptcn.com 代码示例 const User = sequelize.define('User', { // ... }); const Project = sequelize.define('Project', { // ... }); const UserProject = sequelize.define('UserProject', { // ... }); User.belongsToMany(Project, { through: UserProject }); Project.belongsToMany(User, { through: UserProject });
在上面的例子中,我们定义了三个 Model:User
、Project
和 UserProject
。它们之间建立了多对多的关系,即一个用户可以参加多个项目,一个项目也可以有多个成员。我们使用 User.belongsToMany(Project, { through: UserProject })
方法和 Project.belongsToMany(User, { through: UserProject })
方法分别定义了两个 Model 之间的关联关系,并指定了中间表为 UserProject
。
总结
本文介绍了 Sequelize 中的 Model(模型)基础知识,包括 Model 的定义、属性设置、关联关系配置等。Sequelize 提供了非常灵活的 Model 定义和关联关系配置方式,可以满足不同的业务需求。希望本文能够对读者理解 Sequelize 提供的 ORM 框架有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655f25b2d2f5e1655d955318