GroupBy和OrderBy Laravel Eloquent

时间:2016-11-02 18:01:09

标签: php mysql laravel laravel-5.2

使用信息中心构建聊天应用程序,并尝试获取其他用户发送的最后一条消息的通知。

这是我的模型关系:

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中不能很好地合作。

感谢任何帮助!

1 个答案:

答案 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(),它只返回一条记录,而不是一个集合。