Php Laravel为聊天应用程序加载已读和未读消息
我正在使用Laravel和Vue开发聊天应用程序 聊天室打开时,页面向下滚动至页面底部,显示最近50条消息 我有一个模型Php Laravel为聊天应用程序加载已读和未读消息,php,laravel,vue.js,Php,Laravel,Vue.js,我正在使用Laravel和Vue开发聊天应用程序 聊天室打开时,页面向下滚动至页面底部,显示最近50条消息 我有一个模型message和message\u通知和message\u通知为组中的每个用户都有一行,并且是可见的标志。这就是我可以通过用户获取未读消息的方式 消息表包含以下字段 id| body | conversation_id | user_id id | message_id | conversation_id | user_id | is_seen MessageNotifi
message
和message\u通知
和message\u通知
为组中的每个用户都有一行,并且是可见的
标志。这就是我可以通过用户获取未读消息的方式
消息
表包含以下字段
id| body | conversation_id | user_id
id | message_id | conversation_id | user_id | is_seen
MessageNotification
表包含以下字段
id| body | conversation_id | user_id
id | message_id | conversation_id | user_id | is_seen
我已经使用paginator
实现了无限顶层加载。因此,当用户到达滚动条顶部时,limit 25 offset 0
变为limit 25 offset 25
,依此类推
现在,我正在尝试实现任何常见的聊天应用程序功能,当用户打开聊天组对话时,加载所有未读消息并加载未读消息之前的最后n条消息
因此,我有一个方法来getMessages
,它返回paginator集合,忽略is\u 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
端,分页将变得无用,因为我会将所有未读消息标记为已读已装入
,因此下次启动查询时,limit 25 offset 25
将给出一些相同的数据
我如何解决这个问题?Hi@mikeros你在使用关系吗。如果您实现了这些功能,您可以使用larvel模型函数,如Messages::whereIsSeen(true)->limit(20)@我的问题不是将它们标记为已读。它将未读邮件与已读邮件和无限顶部滚动加载合并。我将在一个集合中获取25条已读邮件,然后在另一个查询中获取未读邮件,然后像在laravel文档中那样合并集合,或者我将它们作为2个参数提供给vue,而不是1个,这甚至可能会给您更多的控制,你有可能这样做吗?@amirkamizi是的,我试过了,问题是分页。当用户打开聊天室时,所有未读消息都标记为已读,因此当滚动到顶部并加载下一组25条消息时,结果集会发生变化。@Mikeros哦,我明白了,然后我发现在您的查询中,您已按message.id排序。但在我看来,您应该在db“updated_at”中添加另一列,这样当您收到阅读消息时,可以按updated_at而不是id对其进行排序。当看到状态更改时,updated_at也会更改。对于分页,因为您不希望这些未读消息被加载两次,您可以A:将未读更改为在后台读取并重新加载数据(全部为现在读取),或B:将最近更改的已读消息的计数发送到后端,以便按顺序偏移+计数并更新_。你怎么认为?