我在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;
}
}
conversation
和message
之间的关系是一对多。
会话表仅包含id
,邮件表包含id
和opened
(我只提供相关列)。
答案 0 :(得分:1)
这就是我解决它的方法:
opened
表格conversation_user
列
opened
列更新为1 opened
列更新为0 我写了这个函数,它将检查用户是否有新消息(在User
模型内):
public function hasUnread(){
return (bool)$this->conversations()->whereOpened(0)->count();
}