如何使用Sequelize创建多对多表?
[我正在尝试使用Sequelize创建关系表,但是当我运行sequelize.sync()
创建关系表时,他正在创建一个没有'id'字段的表,并定义了应为外键(例如主键)的字段。
执行此操作的特定方法是什么?
代码(就像官方文档一样推荐):
Project.belongsToMany(User, {through: 'UserProject'});
User.belongsToMany(Project, {through: 'UserProject'});
两个型号:
const Project = sequelize.define('Project', {
name: Sequelize.STRING,
price: {
type: Sequelize.FLOAT(10, 2),
validate: {
isFloat: true,
}
}
}, {
tableName: "project"
});
const User = sequelize.define('User', {
username: {
type: Sequelize.STRING(40),
unique: true,
allowNull: false,
validate: {
notEmpty: true,
}
},
description: Sequelize.STRING(200),
}, {
tableName: 'user',
});
生成的Mysql表:
| Field | Key |
| ---------- | --- |
| createdAt | |
| updatedAt | |
| userId | PRI |
| projectId | PRI |
回答如下:我认为这是正确的。您要描述的表称为联接表,该联接表通过其记录将User
和Project
链接在一起。您可以将其读为“用户1具有项目2”,“用户3具有项目5”等。该表不存储任何其他数据,仅用于链接两个模型。我认为您可以根据Sequelize文档使用user.getProjects()
查询它。
如何使用Sequelize创建多对多表?
[我正在尝试使用Sequelize创建关系表,但是当我运行sequelize.sync()
创建关系表时,他正在创建一个没有'id'字段的表,并定义了应为外键(例如主键)的字段。
执行此操作的特定方法是什么?
代码(就像官方文档一样推荐):
Project.belongsToMany(User, {through: 'UserProject'});
User.belongsToMany(Project, {through: 'UserProject'});
两个型号:
const Project = sequelize.define('Project', {
name: Sequelize.STRING,
price: {
type: Sequelize.FLOAT(10, 2),
validate: {
isFloat: true,
}
}
}, {
tableName: "project"
});
const User = sequelize.define('User', {
username: {
type: Sequelize.STRING(40),
unique: true,
allowNull: false,
validate: {
notEmpty: true,
}
},
description: Sequelize.STRING(200),
}, {
tableName: 'user',
});
生成的Mysql表:
| Field | Key |
| ---------- | --- |
| createdAt | |
| updatedAt | |
| userId | PRI |
| projectId | PRI |
回答如下:我认为这是正确的。您要描述的表称为联接表,该联接表通过其记录将User
和Project
链接在一起。您可以将其读为“用户1具有项目2”,“用户3具有项目5”等。该表不存储任何其他数据,仅用于链接两个模型。我认为您可以根据Sequelize文档使用user.getProjects()
查询它。