Laravel为聊天应用程序加载已读和未读消息

时间:2019-10-29 11:23:08

标签: php laravel vue.js

我正在使用Laravel and Vue开发聊天应用程序。

打开聊天窗口后,页面向下滚动到页面底部,显示最新的50条消息。

我有一个模型messagemessage_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会提供一些相同的数据。

我该如何解决?

0 个答案:

没有答案