按日期划分的Laravel群组邮件

时间:2016-12-12 20:27:09

标签: php laravel eloquent

我有一个带有hasMany(' App \ Message')关系的Conversation模型。我想通过" created_at"对所有消息进行分组。属性。 所以当我这样做时:

$conversation = Conversation::first()->with('messages');

应该返回这样的内容:

{
    "conversation_name": "some conversation",
    "users": [list of users in the conversation],
    "messages": [
         "today": [collection of messages from today],
         "yesterday": [collection of messages from yesterday],
         "some date": [collection of messages from some date].... etc
    ]
}

到目前为止,我能做的最好的事情是:

Message::all()->groupBy(function($query){
    return $query->created_at->format('Y-m-d');
});

然后我只收到消息而不是其他会话信息。 我希望能够做到这样的事情:

Conversation::find(12)->with('messages')->groupBy(function($query){
    return $query->created_at->format('Y-m-d');
});

但它没有用。

任何人都对此有所了解? :)

1 个答案:

答案 0 :(得分:1)

如果有人有兴趣,我解决了这个问题:

class Conversation{

     protected $appends = ['messages'];

     public function getMessagesAttribute(){
         return Message::where('conversation_id', $this->id)
             ->get()->groupBy(function($query){
                 return $query->created_at->format('Y-m-d');
             });

     }

}