2016-12-12 10 views
1

hasMany( 'App \ Message')の関係を持つ会話モデルがあります。私はすべてのメッセージを "created_at"プロパティでグループ化したいと思います。 だから私が行うとき:Laravelグループメッセージby日付

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

をしかし、それは動作しません: 私はこのような何かをできるようにしたいと思います。

誰でもこの問題に取り組んでいますか?誰もが興味を持っている場合:)

+0

をこれは悪いかもしれませんが、なぜあなたは、PHPを使用してそれらを分離/すべてのメッセージを取得し、グループにそれらをアップしませんか? – Mihailo

答えて

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

    } 

}