Laravel - 检查对话中的新消息

时间:2014-05-20 17:19:03

标签: laravel laravel-4

我在Laravel中创建了应用程序,用户可以使用类似Facebook的消息进行通信。现在,当我检查新消息时,我遇到了问题。我创建了一个函数,它需要查询所有会话以及这些会话中的所有消息,以查找新的(未打开的)消息。

所以我问是否有不同的方式来实现这一目标 - 不会过多地强调服务器的所有查询。

这是我的功能:

function newMessage(){
    if(Auth::check()){
        $conversations = User::find(Auth::user()->id)->conversations;
        $new = false;
        foreach ($conversations as $key => $value) {
            if(count(Conversation::find($value->id)->messages()->where("user_id", "!=", Auth::user()->id)->where("opened", "=", 0)->get()) > 0){
                $new = true;
            }
        }

        return $new;
    }else{
        return false;
    }
}

conversationmessage之间的关系是一对多。 会话表仅包含id,邮件表包含idopened(我只提供相关列)。

1 个答案:

答案 0 :(得分:1)

这就是我解决它的方法:

  • opened表格
  • 中创建了conversation_user
  • 当用户打开消息opened列更新为1
  • 当用户发送消息时,除了发送消息的用户之外,该对话中的每个用户的opened列更新为0

我写了这个函数,它将检查用户是否有新消息(在User模型内):

public function hasUnread(){
    return (bool)$this->conversations()->whereOpened(0)->count();
}