📅  最后修改于: 2023-12-03 15:20:06.045000             🧑  作者: Mango
Sequelize 是 Node.js 中一个基于 Promise 的 ORM 框架,支持 PostgreSQL、MySQL、SQLite 和 MSSQL 等多个数据库,让操作数据库变得更加简单和高效。
在 Sequelize 中,可以通过关联辅助方法来处理模型之间的关联关系。本文将对 Sequelize 关联辅助方法进行介绍。
在 Sequelize 中,模型之间可以有以下几种关联关系:
belongsTo
:一个模型属于另一个模型;hasOne
:一个模型只有一个关联模型;hasMany
:一个模型有多个关联模型;belongsToMany
:多对多关联。belongsTo
belongsTo
将会在源模型中添加一个外键。例如,一个 Task
模型属于一个 User
模型:
const Task = sequelize.define('task', { /* ... */ });
const User = sequelize.define('user', { /* ... */ });
Task.belongsTo(User);
上述代码将在 Task
模型中添加一个外键 userId
,指向 User
模型的 id
。
若 User
模型中的主键不是 id
,可以通过 foreignKey
选项指定外键:
Task.belongsTo(User, { foreignKey: 'assigneeId' });
hasOne
hasOne
将会在关联模型中添加一个外键。例如,一个 User
模型只有一个 Profile
模型:
const User = sequelize.define('user', { /* ... */ });
const Profile = sequelize.define('profile', { /* ... */ });
User.hasOne(Profile);
上述代码将在 Profile
模型中添加一个外键 userId
,指向 User
模型的 id
。
若 Profile
模型中的外键不是 userId
,可以通过 foreignKey
选项指定关联模型的外键:
User.hasOne(Profile, { foreignKey: 'user_id' });
hasMany
hasMany
会在关联模型中添加一个外键。例如,一个 User
模型可以有多个 Task
模型:
const User = sequelize.define('user', { /* ... */ });
const Task = sequelize.define('task', { /* ... */ });
User.hasMany(Task);
上述代码将在 Task
模型中添加一个外键 userId
,指向 User
模型的 id
。
若 Task
模型中的外键不是 userId
,可以通过 foreignKey
选项指定关联模型的外键:
User.hasMany(Task, { foreignKey: 'assigned_to' });
belongsToMany
belongsToMany
会创建一个中间模型,用于将两个模型关联起来。例如,一个 User
模型和一个 Group
模型是多对多关系:
const User = sequelize.define('user', { /* ... */ });
const Group = sequelize.define('group', { /* ... */ });
User.belongsToMany(Group, { through: 'UserGroup' });
Group.belongsToMany(User, { through: 'UserGroup' });
上述代码将创建一个中间模型 UserGroup
,用于将 User
模型和 Group
模型关联起来。
若中间模型不想指定名称,可以省略 through
选项:
User.belongsToMany(Group);
Group.belongsToMany(User);
Sequelize 关联辅助方法 belongsTo
、hasOne
、hasMany
和 belongsToMany
分别用于不同类型的关联关系。通过使用这些方法,可以更加方便地对多个模型进行关联。