request->post('toUid'); //发送给用户ID $msg = $this->request->post('msg'); //发送的消息内容 if (!is_numeric($toUid) || empty($msg)) { $this->fail(500, '参数校验错误'); } $messageId = Db::table('tb_message') ->insertGetId([ 'from_uid' => $this->getUser()->user_id, 'to_uid' => $toUid, 'msg' => $msg, 'is_read' => 0, 'created_at' => time(), ]); $this->success('success', [ 'messageId' => $messageId, ]); } //读消息 public function readMessage() { $messageId = $this->request->post('messageId'); //消息ID if (!is_numeric($messageId)) { $this->fail(500, 'messageId参数校验错误'); } $message = Db::table('tb_message') ->where(['id' => $messageId]) ->find(); if (!$message) { $this->fail(501, 'messageId不存在'); } if ($message['to_uid'] != $this->getUser()->user_id) { $this->fail(502, '没有权限读消息'); } $message['is_read'] = 1; $message['read_at'] = time(); Db::table('tb_message') ->where(['id' => $messageId]) ->update([ 'is_read' => 1, 'read_at' => time(), ]); $this->success('success', $message); } //获取我的所有消息 public function getMyAllMessages() { $page = $this->request->post('page'); //页码 $pageNum = $this->request->post('pageNum'); //每页显示的数据条数 if (!is_numeric($pageNum) || !is_numeric($page)) { $this->fail(500, 'page或pageNum参数校验错误'); } $data = Db::table('tb_message') ->where(['to_uid' => $this->getUser()->user_id]) ->order('created_at DESC') ->paginate([ 'page' => $page, 'list_rows' => $pageNum, ]); // 使用 each 方法处理分页数据 $data->each(function($item) { $fromUser = Db::table('tb_user') ->where(['id' => $item['from_uid']]) ->field('username,avatar') ->find(); if ($fromUser) { // 处理系统头像 if (str_starts_with($fromUser['avatar'], 'system://')) { $avatarData = explode('//', $fromUser['avatar']); $avatarId = intval($avatarData[1]); $avatar = Db::table('tb_system_avatar') ->where(['id' => $avatarId]) ->field('image_url') ->find(); if ($avatar) { $fromUser['avatar'] = $avatar['image_url']; } } // 只保留需要的字段 $item['from_user'] = [ 'username' => $fromUser['username'], 'avatar' => $fromUser['avatar'] ]; } return $item; }); $this->success('success', $data); } }