Javascript 使用联接上的OR语句对include进行续集
我有一个具有以下关系的用户实体:Javascript 使用联接上的OR语句对include进行续集,javascript,node.js,sequelize.js,chat,Javascript,Node.js,Sequelize.js,Chat,我有一个具有以下关系的用户实体: User.associate = (models) => { User.belongsToMany(User, { as: "friends", through: "user_friend", onDelete: "CASCADE", }) User.hasMany(models.Message, { as: "sentMessages", foreignKey: "senderId" })
User.associate = (models) => {
User.belongsToMany(User, {
as: "friends",
through: "user_friend",
onDelete: "CASCADE",
})
User.hasMany(models.Message, { as: "sentMessages", foreignKey: "senderId" })
User.hasMany(models.Message, {
as: "receivedMessages",
foreignKey: "recipientId",
})
}
Message.associate = (models) => {
Message.belongsTo(models.User, { foreignKey: "senderId" })
Message.belongsTo(models.User, { foreignKey: "recipientId" })
}
以及具有以下关系的消息实体:
User.associate = (models) => {
User.belongsToMany(User, {
as: "friends",
through: "user_friend",
onDelete: "CASCADE",
})
User.hasMany(models.Message, { as: "sentMessages", foreignKey: "senderId" })
User.hasMany(models.Message, {
as: "receivedMessages",
foreignKey: "recipientId",
})
}
Message.associate = (models) => {
Message.belongsTo(models.User, { foreignKey: "senderId" })
Message.belongsTo(models.User, { foreignKey: "recipientId" })
}
我正在尝试这样做:给我一个用户,包括他们的朋友,包括他们与每个朋友的对话历史,使用以下方法:
let user = await User.findOne({
where: {
auth_key: auth_key,
},
include: {
association: "friends",
attributes: ["first_name", "last_name", "chat_name", "profile_picture"],
through: {
attributes: [],
},
include: [
{
required: false,
association: "sentMessages",
where: {
recipientId: 1,
},
},
{
required: false,
association: "receivedMessages",
where: {
senderId: 1,
},
},
],
},
})
这确实是一种工作,但它似乎真的很混乱,我不喜欢将消息分为发送
和接收
,我只希望它们组合在一起。当前的响应如下所示:
{
"id": 1,
"username": "ajsmith",
"first_name": "Anthony",
"last_name": "Smith",
"chat_name": "Anthony.Smith",
"email": "a@gmail.com",
"createdAt": "2020-06-15T19:59:58.000Z",
"updatedAt": "2020-06-15T19:59:58.000Z",
"friends": [
{
"first_name": "Sarah",
"last_name": "Smith",
"chat_name": "Sarah.Smith",
"sentMessages": [
{
"id": 2,
"senderId": 2,
"recipientId": 1,
"type": "text",
"content": "Hi",
"createdAt": "2020-06-15T19:59:58.000Z",
"updatedAt": "2020-06-15T19:59:58.000Z"
}
],
"receivedMessages": [
{
"id": 1,
"senderId": 1,
"recipientId": 2,
"type": "text",
"content": "Hello",
"createdAt": "2020-06-15T19:59:58.000Z",
"updatedAt": "2020-06-15T19:59:58.000Z"
}
]
}
]
}
我不确定我的关系是错误的,我的查询是错误的,还是根本不可能做到,但在过去的一周里,我搜索了sequelize文档、stackoverflow以及介于两者之间的所有内容,但没有找到解决方案。似乎如果我可以在正在发生的左外部联接
上包含或
语句,那么我可以在senderId或recipientId为我的用户的位置发送和接收消息