【发布时间】:2019-02-21 04:32:11
【问题描述】:
我无法理解有关 Belongs-to-Many 关系的 sequelize 文档。我已经能够在数据库本身中正确设置它,但是现在我想执行基本的 CRUD 操作,我很迷茫。
所以事情是这样的:我有用户和聊天室。每当用户创建聊天室时,我希望它成为房间的所有者以及参与者。
问题是...我不知道如何将此用户添加到参与者。 DB 方面,有一个 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);
}
},
}
};
所以是的,我知道这绝对不是这样做的方法,但我搜索了很多教程并没有找到可行的解决方案...... :(
【问题讨论】:
-
为什么不把 owner 的逻辑移到 chatroom_user 表中,添加一个新的 owner 为 Boolean 的列呢?
-
“所有者”不在 chatroom_user 表中。其中只有用户 ID 和聊天室 ID。所有者是“聊天室”表中包含用户 ID 的列
标签: node.js sequelize.js graphql