sequelize 两张表 多字段 级联
时间: 2023-09-06 09:08:44 浏览: 174
Sequelize 支持在两张表之间建立级联关系,将多个字段关联在一起。下面是一个示例,假设我们有两个模型,一个是 `User` 模型,另一个是 `Task` 模型。每个任务都是由一个用户创建的,我们想要在创建任务时将该任务与创建它的用户关联起来。我们使用 Sequelize 的 `belongsTo()` 方法来定义这种关系。
```javascript
// User 模型定义
const User = sequelize.define('user', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
}
});
// Task 模型定义
const Task = sequelize.define('task', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
title: {
type: DataTypes.STRING,
allowNull: false
},
description: {
type: DataTypes.TEXT,
allowNull: false
},
userId: { // 外键
type: DataTypes.INTEGER,
allowNull: false
}
});
// User 和 Task 之间的关联关系
Task.belongsTo(User, {
foreignKey: 'userId',
as: 'user'
});
// 创建任务并关联用户的示例
const user = await User.create({
name: 'John Doe',
email: 'johndoe@example.com'
});
const task = await Task.create({
title: 'Sample Task',
description: 'This is a sample task',
userId: user.id
});
const taskWithUser = await Task.findOne({
where: { id: task.id },
include: 'user'
});
console.log(taskWithUser.user); // 获取创建该任务的用户实例
```
在上面的示例中,我们将 `Task` 模型中的 `userId` 字段作为外键,并使用 `belongsTo()` 方法将其与 `User` 模型关联起来。在创建任务时,我们使用 `user.id` 将任务与创建它的用户关联起来。在查询任务时,我们使用 `include` 选项将该任务的用户一起获取,并使用 `user` 访问器方法访问该用户实例。
阅读全文