javascript - 如何使用 sequelize 在一个数据库请求中将数据插入多个表?

标签 javascript mysql node.js graphql sequelize.js

我有以下关系:

enter image description here

协会是:

  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/

相关文章:

javascript - firebase 回调中无法识别异步函数

javascript - 如何在 HTML 属性中使用 EJS?

javascript - 当输入被清除时输入值重置

javascript - 如何使用 JOI 验证请求正文中的对象数组

javascript - Node.js HTTP - 类型错误 : Header name must be a valid HTTP Token

javascript - ZingChart 缩放日期问题

php - PDO/MySQL : Underscore ('_' ) wildcard in PHP seems escaped by default

MYSQL按 "gaps"填充组

php - 如何在WordPress的wp-db文件中设置mysql_query ('set Names utf8')

javascript - 如何使node js的处理异步功能在node js中同步