为什么不考虑一下在分组得到原始数据之后再进行处理呢?
/**
* 登陆用户收到的私信
* @return mixed
*/
public function getMessageList()
{
$user_id = \Auth::id();
$list_messages = Message::where(compact('user_id'))
->with(['friendUser' => function ($query) {
$query->select(['name', 'id', 'avatar']);
}])
->orderBy('id', 'desc')
->get()
->groupBy('friend_id');
// 为私信列表整理数据
return $this->tidyMessageForList($list_messages);
}
/**
* 为私信列表整理数据
* @param array $list_messages
* @return mixed
*/
protected function tidyMessageForList($list_messages)
{
return $list_messages->map(function ($item) {
// 获取最新的一条信息
$item_group = $item->first();
// 当前数据中是否需要添加unread的类
$item_group->unread_class = $this->unreadClass($item);
return $item_group;
});
}
/**
* 当前数据中是否需要添加unread的类
* @param array $item_messages
* @return boolean
*/
protected function unreadClass($item_messages)
{
$unread_class = false;
$item_messages->each(function ($item) use (&$unread_class) {
if ($item->user_id != $item->from_user_id && $item->is_read === 'F') {
$unread_class = true;
return false;
}
});
return $unread_class;
}