评论列表优化联表问题


public function read1()
{
    $newsId = $this->request->param('news_id', 0, 'intval');
    $param = $this->request->param();
    $where['news_id'] = ['=', $newsId];
    $where['status'] = ['=', 1];
    $count = model('Comment')->getNormalCommentsCount($where);
    $this->getPageAndSize($param);
    $comments = model('Comment')->getNormalComments($where, $this->from, $this->size);
    if( !$comments->isEmpty() ) {
        $userId = [];
        foreach ($comments as $comment) {
            $userId[] = $comment['user_id'];
            if( !empty($comment['to_user_id']) ) {
                $userId[] = $comment['to_user_id'];
            }
        }
        $ids = array_unique($userId);
        $condition['id'] = ['in', $ids];
        $users = model('User')->getUserInId($condition);
        if( empty($users) ) {
            $userData = [];
        } else {
            foreach ($users as $user) {
                $userData[$user['id']] = $user;
            }
        }
        $returnData = [];
        foreach ($comments as $comment) {
            $returnData[] = [
                'id' => $comment['id'],
                'content' => $comment['content'],
                'user_id' => $comment['user_id'],
                'news_id' => $comment['news_id'],
                'parent_id' => $comment['parent_id'],
                'create_time' => $comment['create_time'],
                'username' => empty($userData[$comment['user_id']]) ? "" : $userData[$comment['user_id']]['username'],
                'toUsername' => empty($userData[$comment['to_user_id']]) ? "" : $userData[$comment['to_user_id']]['username'],
                'userImage' => empty($userData[$comment['user_id']]) ? "" : $userData[$comment['user_id']]['image'],
            ];
        }
        $total_page = ceil($count / $this->size);
        $result = [
            'total_page' => $total_page,
            'page' => $this->page,
            'list' => $returnData,
        ];
    } else {
        $result = [];
    }
    return Show::success($result);
}

相关