2016-11-02 197 views
0

使用仪表板构建聊天应用程序,并试图获取其他用户发送的最后一条消息的通知。GroupBy和OrderBy Laravel Eloquent

这里是我的模型关系:

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'); 
} 

在我无法弄清楚的事情是不是返回,因为它应该通过使用排序依据排序的最后一条消息,则返回该组中存在的第一条记录数据库。

看了看网上,但似乎无法找到任何有关此信息。我发现唯一的一个帖子是有人说,在laravel的orderBy和groupBy在一起玩的不好。

任何帮助表示赞赏!

回答

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

+0

今晚我会围绕你的建议去看看我能不能找出答案。事情是,我不想检索1条消息,我正在寻找检索每个活动对话的最后一条新消息,以便投入通知。因此,如果3个用户向我反馈了我与他们之间的对话,我希望这些消息看起来像是类似于Facebook的“新通知”。我希望这是有道理的。这就是为什么我使用groupBy() – max234435