首页 > 解决方案 > 每当我尝试将服务器添加到用户模型时,Sequelize 不会在直通/联结表中添加记录

问题描述

我有一个ServerUser模型,我many-to-many在它们之间建立了这样的关系:

User.belongsToMany(Server, { through: 'Server_Users' });
Server.belongsToMany(User, { through: 'Server_Users' });

然后我得到他的用户id,创建一个服务器并尝试将服务器添加到用户,如下所示:

let user = await User.findByPk(userId)

    let socketServer = await Server.create({
        name: name,
        thumbnail: thumbnail,
        userId: userId
    });

    await user.addServer(socketServer)

这会在数据库中创建并插入服务器,但是,它不会在联结server_users表中创建用户和服务器之间的关系。我也没有收到任何错误,所以我不知道发生了什么。

日志显示服务器的 INSERT,然后是某种更新:

Executing (default): SELECT `id`, `username`, `password`, `email`, `createdAt`, `updatedAt` FROM `users` AS `user` WHERE `user`.`id` = '1';
Executing (default): INSERT INTO `servers` (`id`,`userId`,`name`,`thumbnail`,`endpoint`,`rooms`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?);
Executing (default): UPDATE `servers` SET `userId`=?,`updatedAt`=? WHERE `id` IN (25)

标签: node.jssequelize.js

解决方案


试试这个。

await user.addServer(Server, socketServer);

从文档https://sequelize.org/master/class/lib/associations/belongs-to-many.js~BelongsToMany.html#instance-method-add

顺便说一句,如果你这样做,你将使用 2 个 DB 调用。您可以使用 .createServer 方法将其减少为一个。

请在此处阅读:https ://sequelize.org/master/class/lib/associations/belongs-to-many.js~BelongsToMany.html#instance-method-create


推荐阅读