我正在尝试创建具有序列化功能的模型,该模型具有一定的归一化功能。这是我第一次体验续集,我认为我可以让它做我想做的事,但是我很挣扎。
这是我的两个桌子。
dbo.Users
| id | firstName | lastName | roleId | createdAt.. | updatedAt.. |
| 1 | john | doe | 1 |
| 2 | chris | christopherson | 1 |
| 3 | joe | montana | 2 |
dbo.Roles
| id | roleName | createdAt.. | updatedAt.. |
| 1 | admin |
| 2 | power-user |
基本上,我要寻找的是一旦正确创建了模型,当我使用Role: admin
插入/创建“用户”时,它(序列化)就会知道已经有admin
条记录在dbo.Roles
内,因此它将获取相应的role.id
(1)并将其插入到新的用户记录中。
现在,如果我使用Role: user
创建一个新用户,因为它不在dbo.Roles
中,它将创建第三条记录
dbo.Roles
| id | roleName | createdAt.. | updatedAt.. |
| 1 | admin |
| 2 | power-user |
| 3 | user |
在dbo.Roles
内并添加
dbo.Users
| id | firstName | lastName | roleId | createdAt.. | updatedAt.. |
| 1 | john | doe | 1 |
| 2 | chris | christopherson | 1 |
| 3 | joe | montana | 2 |
| 4 | jeff | bezos | 3 |
到我的dbo.Users
表中。
到目前为止,这是我一直在尝试的方法,但是在SequelizeEagerLoadingError
表中却不断收到admin
或重复的dbo.Roles
记录。
const Role = sequelize.define('Role', {
RoleName: Sequelize.STRING,
CreatedBy: Sequelize.STRING
});
const User = sequelize.define('User', {
FirstName: Sequelize.STRING,
LastName: Sequelize.STRING,
UserPrincipalName: Sequelize.STRING,
Department: Sequelize.STRING,
CreatedBy: Sequelize.STRING,
UpdatedBy: Sequelize.STRING,
RoleId: {
type: Sequelize.INTEGER,
references: {
model: Role,
key: 'id'
}
}
});
Role.hasMany(User, { foreignKey: 'RoleId' });
呼叫User.create
:
await User.create({
FirstName: 'Jeff',
LastName: 'Bezos'
Role: {
RoleName: 'admin',
CreatedBy: 'jimjones@gmail.com'
}
}, {
include: [{
model: Role
}]
});