// +---------------------------------------------------------------------- declare (strict_types=1); namespace app\api\model; use app\common\model\UserFans as UserFansModel; /** * 用户粉丝模型类 * Class UserFans * @package app\api\model */ class UserFans extends UserFansModel { protected $globalScope = ['']; /** * 隐藏字段 * @var array */ protected $hidden = [ 'update_time' ]; /** * 关注我的粉丝用户列表 * @param $userId * @param array $param * @param int $listRows * @return mixed */ public function getFansList($userId, array $param = [], int $listRows = 15) { $list = $this->alias($this->name) ->leftJoin('user u','u.user_id='.$this->name.'.fans_id') ->leftJoin('user_info ui','ui.user_id='.$this->name.'.fans_id') ->where([$this->name.'.user_id'=> $userId, $this->name.'.status'=> 1,'u.status'=>1,'u.is_delete'=>0]) ->where(function($query) use($param){ $keyword = isset($param['keyword'])? $param['keyword'] : ''; if($keyword){ $query->where('u.nick_name','like',"%{$keyword}%"); } }) ->field($this->name.'.*,u.nick_name,u.user_type,u.avatar_id,ui.admission_year,ui.position,ui.school_id') ->group($this->name.'.fans_id') ->order($this->name.'.update_time desc, '.$this->name.'.id desc') ->paginate($listRows); return $this->setListDataFromApi($list, $param); } /** * 我关注的用户列表 * @param $userId * @param array $param * @param int $listRows * @return mixed */ public function getFollowList($userId, array $param = [], int $listRows = 15) { $list = $this->alias($this->name) ->leftJoin('user u','u.user_id='.$this->name.'.user_id') ->leftJoin('user_info ui','ui.user_id='.$this->name.'.user_id') ->where([$this->name.'.fans_id'=> $userId, $this->name.'.status'=> 1,'u.status'=>1,'u.is_delete'=>0]) ->where(function($query) use($param){ $keyword = isset($param['keyword'])? $param['keyword'] : ''; if($keyword){ $query->where('u.nick_name','like',"%{$keyword}%"); } }) ->field($this->name.'.*,u.nick_name,u.user_type,u.avatar_id,ui.admission_year,ui.position,ui.school_id') ->group($this->name.'.user_id') ->order($this->name.'.update_time desc, '.$this->name.'.id desc') ->paginate($listRows); return $this->setListDataFromApi($list, $param); } /** * 设置展示的数据 api模块 * @param $info * @return mixed */ private function setListDataFromApi($info, $params=[]) { return $this->setListData($info, function ($data) use ($params){ // 整理数据 api模块 $this->setDataFromApi($data); // 隐藏冗余的字段 $this->hidden(array_merge($this->hidden, ['status','avatar_id'])); }); } /** * 整理数据 api模块 * @param $info * @return mixed */ private function setDataFromApi($info) { return $this->setData($info, function ($data) { // 用户类型 $userType = isset($data['user_type'])? $data['user_type'] : 0; $schoolId = isset($data['school_id'])? $data['school_id'] : 0; if($userType == 3){ // 招生学校 $data['school_name'] = $schoolId? School::getSchoolField($schoolId) : ''; }else{ // 生源学校 $data['school_name'] = $schoolId? SourceShool::getSchoolField($schoolId) : ''; } // 用户头像 $avatarId = isset($data['avatar_id'])? $data['avatar_id'] : 0; if($avatarId){ $avatarData = UploadFile::detail($avatarId); $data['avatar_url'] = isset($avatarData['preview_url'])? $avatarData['preview_url'] : ''; } // 用户类型 $admissionYear = isset($data['admission_year'])? $data['admission_year'] : ''; $position = isset($data['position'])? $data['position'] : ''; $data['user_type_text'] = $userType == 3? ($position==1?'科任老师':'招生老师') : ($admissionYear? $admissionYear.'级' : '学生'); }); } /** * 获取粉丝用户ID * @param int $userId * @return array */ public static function getFansUid(int $userId) { return self::where(['user_id'=> $userId, 'status'=>1])->column('fans_id'); } /** * 获取粉丝数 * @param int $userId * @return array */ public static function getFansNum(int $userId) { return self::where(['user_id'=> $userId, 'status'=>1])->count('fans_id'); } /** * 验证是否为粉丝或者互粉用户 * @param $userId 用户 * @param $fansId 粉丝用户 * @param int $fansStatus 粉丝状态:1-已关注,2-已互关 * @return int */ public static function checkFans($userId, $fansId, $fansStatus = 0) { $where = ['user_id'=> $userId, 'fans_id'=> $fansId, 'status'=> 1]; if($fansStatus>0){ $where['fans_status'] = $fansStatus; } return (int)self::where($where)->value('fans_status'); } }