belongsTo("app\\common\\model\\user\\User", 'sender_id', 'user_id'); } /** * 关联会话 */ public function conversation() { return $this->belongsTo("app\\common\\model\\plus\\business\\chat\\Conversation", 'conversation_id', 'conversation_id'); } /** * 发送消息 * @param int $conversationId 会话ID * @param int $senderId 发送者ID * @param string $content 消息内容 * @param int $messageType 消息类型 * @param int $appId 应用ID * @return bool */ public function sendMessage($conversationId, $senderId, $content, $messageType = 0) { $data = [ 'conversation_id' => $conversationId, 'sender_id' => $senderId, 'content' => $content, 'message_type' => $messageType, 'app_id' => self::$app_id, ]; return $this->save($data); } /** * 标记消息为已读 * @param int $chatId 消息ID * @param int $readerId 阅读者ID * @return bool */ public function markAsRead($chatId, $readerId) { $message = $this->find($chatId); if ($message && $message->sender_id != $readerId) { $message->is_read = 1; $message->read_time = time(); $message->update_time = time(); return $message->save(); } return false; } /** * 获取会话消息列表 * @return array|\think\Paginator */ public function getMessages($param) { return $this->with(['sender']) ->where('conversation_id', $param['conversation_id']) ->order('chat_id', 'desc') ->paginate($param); } /** * 获取未读消息数量 * @param int $conversationId 会话ID * @param int $userId 用户ID * @return int */ public function getUnreadCount($conversationId, $userId) { return $this->where('conversation_id', $conversationId) ->where('sender_id', '<>', $userId) ->where('is_read', 0) ->count(); } }