carsonlius

3482 经验值

为什么不考虑一下在分组得到原始数据之后再进行处理呢?

    /**
     * 登陆用户收到的私信
     * @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;
    }

form_user_id && to_user_id 在osc实列中并没有冗余哦

这两者字段用来标识到底是谁发起了私信的动作

当然是要筛出和登陆用户有关系的