📜  sequelize 关联辅助方法 - Javascript (1)

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

Sequelize 关联辅助方法

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 关联辅助方法 belongsTohasOnehasManybelongsToMany 分别用于不同类型的关联关系。通过使用这些方法,可以更加方便地对多个模型进行关联。