users.belongsToMany("roles", {
through: "userRoles",
});
创建用户时,我这样做:
register: async (obj, args, context, info) => {
const PasswordHash = await bcrypt.hash(args.input.Password, 12);
const user = db.users.create({
...args.input,
Password: PasswordHash,
});
db.userroles.create({
UserId: user.Id,
RoleId: args.input.roleId,
});
},
如何在一个请求中做到这一点?现在我在创建用户时做一个然后
获取新创建用户的 ID 并向该用户添加 Angular 色(请求 2)。
后续行动,假设我将有多个连接表与用户表相关联,我将如何
在一个数据库请求中插入所有表?
最佳答案
在您的 MySQL 数据库中创建一个存储过程以创建两个记录,例如
drop procedure if exists createUser
DELIMITER //
CREATE PROCEDURE createUser
(
IN email VARCHAR(200),
IN password BINARY(60),
IN roleId INT
)
BEGIN
DECLARE userId BINARY(16);
INSERT INTO Users (Email, Password)
VALUES (email, password);
# Assuming your user ID is auto-generated, pull ID of last insert
SET userId = LAST_INSERT_ID()
INSERT INTO UserRoles (UserId, RoleId)
VALUES (userId, roleId);
END //
DELIMITER ;
然后您可以使用 Sequelize 调用该存储过程
const { email, roleId } = args.input;
const result = await sequelize
.query('CALL createUser (:email, :password, :roleId)',
{replacements: { email, password: PasswordHash, roleId }});
您可以根据相关参数进行调整以适应,但您明白了。
关于javascript - 如何使用 sequelize 在一个数据库请求中将数据插入多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61622136/