'integer', 'user_id' => 'integer', 'friend_id' => 'integer', 'status' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * 获取用户所有好友 * * @param int $user_id 用户ID * @return array */ public static function getUserFriends(int $user_id) { return UsersFriend::leftJoin('users', 'users.id', '=', 'users_friends.friend_id') ->where('user_id', $user_id)->where('users_friends.status', 1) ->get([ 'users.id', 'users.nickname', 'users.avatar', 'users.motto', 'users.gender', 'users_friends.remark as friend_remark', ])->toArray(); } /** * 判断用户之间是否存在好友关系 * * @param int $user_id 用户ID * @param int $friend_id 好友ID * @param bool $is_cache 是否允许读取缓存 * @return bool */ public static function isFriend(int $user_id, int $friend_id, bool $is_cache = false) { $cacheKey = "good_friends:{$user_id}_{$friend_id}"; if ($is_cache && redis()->get($cacheKey)) { return true; } $isTrue = self::query()->where('user_id', $user_id)->where('friend_id', $friend_id)->where('status', 1)->exists(); if ($isTrue) { redis()->setex($cacheKey, 60 * 5, 1); } return $isTrue; } /** * 获取指定用户的所有朋友的用户ID * * @param int $user_id 指定用户ID * @return array */ public static function getFriendIds(int $user_id) { return UsersFriend::where('user_id', $user_id)->where('status', 1)->pluck('friend_id')->toArray(); } }