使用信息中心构建聊天应用程序,并尝试获取其他用户发送的最后一条消息的通知。
这是我的模型关系:
public function messages() {
return $this->hasMany('App\Message', 'author_id');
}
public function lastMessage() {
return $this->hasMany('App\Message', 'recipient_id')->orderBy('created_at', 'DESC')->groupBy('author_id');
}
在我无法弄清楚的事情上,不是返回最后一条消息,因为它应该使用orderBY进行排序,而是返回数据库中存在的该组的第一条记录。
在线查看,但似乎无法找到任何相关信息。我发现的唯一一件事就是有人说这个帖子和团队在laravel中不能很好地合作。
感谢任何帮助!
答案 0 :(得分:0)
您可以尝试从中调用lastMessage
,然后从中运行查询,而不是在messages
中重新定义关系。
如果没有看到更多的模型架构(即:这些关系定义在哪里?),这可能并不完美,但这是一个开始:
public function lastMessage()
{
return $this->messages() // <-- Notice the ()...this creates a query instead of immediately returning the relationship
->where('recipient_id', $this->id) // Not sure if this is correct, might need to adjust according to how you have defined the tables
->orderBy('created_at', 'desc')
->first();
}
它将使用列出的链式约束查询messages
关系。通过返回first()
,它只返回一条记录,而不是一个集合。