我正在使用Laravel and Vue
开发聊天应用程序。
打开聊天窗口后,页面向下滚动到页面底部,显示最新的50条消息。
我有一个模型message
和message_notifications
,并且message_notifications
在组中每个用户都有1行,并带有is_seen
标志。这样我就可以按用户获取未读消息。
Messages
表具有以下字段
id| body | conversation_id | user_id
MessageNotification
表具有以下字段
id | message_id | conversation_id | user_id | is_seen
我已经使用paginator
实现了无限的顶部加载。因此,当用户到达滚动顶部时,limit 25 offset 0
变为limit 25 offset 25
,依此类推。
现在,我正在尝试实现任何常用的聊天应用程序功能,当用户打开聊天组对话时,加载所有未读消息,并在未读消息之前加载最后n条消息。
所以我有一个getMessages
方法,它返回分页器集合而忽略了is_seen
标志。
select `message_notification`.`id` as `notification_id`,
`messages`.*
from `messages`
inner join `message_notification`
on `message_notification`.`message_id` = `messages`.`id`
where `messages`.`conversation_id` = 406
and `message_notification`.`user_id` = 4
order by mc_messages.id desc
limit 25 offset 0
现在如何在对话中加载所有未读消息以及25条最新已读消息?
我尝试合并2个收藏夹,但是其中一个收藏夹将具有分页功能,而另一个收藏夹则没有分页功能,因此无法正常工作。
如果我将2个集合发送到vue
并在vue
端合并,则分页将变得无用,因为我会将所有未读邮件标记为在mounted
上已读,因此下一次查询被解雇后,limit 25 offset 25
会提供一些相同的数据。
我该如何解决?