[英]Create instance in a sequelize belongs-to-many relation
我很難理解有關“多對多”關系的續集文檔。 我已經能夠在數據庫本身中正確地設置它,但是現在我想要執行基本的CRUD操作,我就迷路了。
事情就是這樣:我有用戶和聊天室。 每當用戶創建聊天室時,我都希望它成為聊天室的所有者以及參與者。
問題是...我不知道如何將此用戶添加到參與者。 在數據庫方面,有一個chatroom_user表,其中包含用戶ID和chatroom ID。 根據我從sequelize文檔中了解到的信息,我必須在模型中創建一個addXXXXX函數,在解析器中使用所需的args進行添加調用...但這是行不通的...
這是我的代碼
聊天室模型:
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
(如果該用戶是該聊天室的所有者,則為true)更新聯接表user_chatroom,否則將其為false
像這樣的東西
id| owner | user_id|chatroom_id|
1 | false | 1 | 1 |
2 | true | 2 | 1 |
3 | false | 3 | 1 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.