gpt4 book ai didi

node.js - 在 Sequelize 属于多关系中创建实例

转载 作者:行者123 更新时间:2023-12-03 22:39:25 24 4
gpt4 key购买 nike

我无法理解有关 Belongs-to-Many 关系的 Sequelize 文档。我已经能够在数据库本身中正确设置它,但是现在我想执行基本的 CRUD 操作,我很迷茫。

所以事情就是这样:我有用户和聊天室。每当用户创建聊天室时,我都希望它成为聊天室的所有者以及参与者。

问题是...我不知道如何将此用户添加到参与者。数据库方面,有一个 chatroom_user 表,其中包含用户 ID 和聊天室 ID。
根据我从 sequelize 文档中的理解,我必须在我的模型中创建一个 addXXXXX 函数,在解析器中使用所需的参数添加调用它......但这不起作用......

这是我的代码

聊天室模型:

export default (sequelize, Datatypes) => {
const Chatroom = sequelize.define('chatroom', {
publicRoom: {
type: Datatypes.BOOLEAN,
allowNull: false
},
});

Chatroom.associate = (models) => {
Chatroom.belongsTo(models.user, {
foreignKey: {
name: 'owner',
allowNull: false
}
});
Chatroom.belongsToMany(models.user, {
through: 'user_chatroom',
foreignKey: {
name: 'chatroom',
allowNull: false
},
onDelete: 'CASCADE'
});
Chatroom.addUsers(models.user);
};

聊天室解析器:
export default {
Query: {
// some queries here...
},
Mutation: {
createChatroom: async (parent, args, {models, user}, info) => {
try {
return await models.chatroom.create({owner: user.id})
.then(models.chatroom.addUsers(user.id));
} catch (err) {
console.log(err);
}
},

}
};

所以是的,我知道这绝对不是这样做的方法,但是我搜索了很多教程并没有找到可行的解决方案...... :(

最佳答案

我可以建议您执行以下操作,从聊天室中删除所有者并将所有者移动到加入表,在您的情况下,是 chatroom_user 表。

export default (sequelize, DataTypes) => {
const Chatroom = sequelize.define('chatroom', {
name: DataTypes.STRING,
publicRoom: {
type: Datatypes.BOOLEAN,
allowNull: false
},
});

Chatroom.associate = (models) => {
Chatroom.belongsToMany(models.User, {
through: 'user_chatroom',
foreignKey: {
name: 'userId',
field: 'user_id',
},
});
};
return Chatroom;
};

然后在您的 UserChatroom 表中
 export default (sequelize, DataTypes) => {
const UserChatroom = sequelize.define('user_chatroom', {
owner: {
type: DataTypes.BOOLEAN,
defaultValues: false,
},
});

return UserChatroom;
};

然后在您的解析器中,当您创建 ChatRoom 时,使用附加列 owner 更新连接表 user_chatroom,如果用户是聊天室的所有者,则值为 true,否则为 false

像这样的事情
id| owner | user_id|chatroom_id|
1 | false | 1 | 1 |
2 | true | 2 | 1 |
3 | false | 3 | 1 |

关于node.js - 在 Sequelize 属于多关系中创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52364534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com