我有一个带有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');
});
但它没有用。
任何人都对此有所了解? :)
答案 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');
});
}
}