假设我有以下描述的模型架构,以便在我的sails应用程序中的2个用户之间添加一些聊天功能。例如,如果我让用户A向用户B发送消息,则用户B将回复给用户A,用户A将始终在两个用户之间创建2个对话。所以我的问题是如何查询两个对话以从A和B获取消息。我尝试过这样的事情,但也许这是一个简单的逻辑。
// User Model
attributes: {
username: {
type: 'string',
required: true,
unique: true,
},
conversations_sender: {
collection: conversation,
via: 'sender'
},
conversations_recipient: {
collection: conversation,
via: 'recipient'
}
}
// Conversation model
attributes: {
sender: {
model: user
},
recipient: {
model: user
},
messages: {
collection: 'message',
via: 'conversation'
}
}
// Message model
attributes: {
text: {
type: 'string'
},
conversation: {
model: 'conversation'
},
}
// Conversation Controller
get: function(req, res) {
var params = {
or : [
{
sender: req.param('sender'),
recipient: req.param('recipient')
},
{
sender: req.param('recipient'),
recipient: req.param('sender')
}
]
}
Conversation.find(params) ...
}
答案 0 :(得分:2)
您应该重新考虑一下您的架构,请参阅此链接,该链接具有满足您需求的良好数据库设计:
http://www.9lessons.info/2013/05/message-conversation-database-design.html
然后,你应该可以使用2个用户id获取所有消息,如下所示:
Conversation.findAll({sender: ..., receiver: ...})
此外,您将需要一个时间戳来显示消息,将来您会想要以某种方式对它们进行排序,并且还可以制作好的“昨天阅读”功能