dominservice/laravel_chat

此包已废弃,不再维护。没有建议的替代包。

用户消息系统

2.1.0 2021-01-29 08:35 UTC

This package is auto-updated.

Last update: 2023-05-27 17:08:58 UTC


README

Latest Version Total Downloads Software License

Laravel Chat

此包允许您将完整的用户消息系统添加到您的Laravel应用程序中。

注意

适用于Laravel 5.6 | 5.7 | 5.8 | 6.* | 7.* | 8.*

安装

composer require dominservice/laravel_chat

或在composer.json中手动放置

"require": {
    "dominservice/laravel_chat": "^2.0"
}

运行

composer update

将服务提供者添加到config/app.php

'providers' => [
    Dominservice\LaravelChat\LaravelChatServiceProvider::class,
],

(...)

'aliases' => [
    'LaravelChat' => Dominservice\LaravelChat\Facade\LaravelChat::class,
]

发布配置

php artisan vendor:publish --provider="Dominservice\LaravelChat\LaravelChatServiceProvider"

迁移

php artisan migrate

使用

获取用户对话

$convs = LaravelChat::getConversations($user_id);

这将返回一个 "Illuminate\Support\Collection" 包含 "Dominservice\LaravelChat\Entities\Conversation" 对象。对于每个对话,您将拥有对话的最后一条消息和对话的用户。示例

foreach ( $convs as $conv ) {
    $getNumOfUsers = $conv->getNumOfUsers();
    $users = $conv->users; /* Collection */
            
    /* $lastMessage Dominservice\LaravelChat\Entities\Message */
    $lastMessage = $conv->getLastMessage();
            
    $senderId = $lastMessage->sender;
    $content = $lastMessage->content;
    $status = $lastMessage->status;
}

获取用户特定对话

$conv = LaravelChat::getConversationMessages($conv_id, $user_id);

这将返回一个 "Dominservice\LaravelChat\Entities\Conversation" 对象。在对象中,您可以获取所有消息、所有用户、conv_id 等,只需浏览对象本身。示例

foreach ( $conv->messages as $msg ) {
    $senderId = $msg->sender;
    $content = $msg->content;
    $status = $msg->status; /* Collection statuses for all users */
    $statusUser = $msg->statusForUser($userId = null);
}

获取两个用户之间对话的对话ID

$conv = LaravelChat::getConversationByTwoUsers($userA_id, $userB_id);

简单返回两个用户之间对话的ID,这是为了在用户尝试向另一个用户发送消息时重定向到对话页面而创建的,如果没有返回ID,则表示这些用户还没有对话,因此我们可以创建一个。

向对话中添加新消息

$conv = LaravelChat::addMessageToConversation($conv_id, $user_id, $content);

简单地将消息添加到现有对话中,内容是消息文本。

创建新对话

$conv = LaravelChat::createConversation($users_ids=array(), $relationType = null, $relationId = null);

使用传递到数组中的用户ID创建新对话。

获取对话中的所有用户

$conv = LaravelChat::getUsersInConversation($conv_id);

返回对话中用户ID的数组。

删除对话

$conv = LaravelChat::deleteConversation($conv_id, $user_id);

"删除"特定用户视图中的对话。

检查用户是否在对话中

$conv = LaravelChat::isUserInConversation($conv_id, $user_id);

如果用户在对话中,返回True或False。

获取特定用户的未读消息数量

$conv = LaravelChat::getNumOfUnreadMsgs($user_id);

返回特定用户的未读消息数量整数。

将对话中的特定用户的所有消息标记为“已读”

$conv = LaravelChat::markReadAllMessagesInConversation($conv_id, $user_id);

示例

public function conversations($convId=null) {
    $currentUser = Auth::user();
    //get the conversations
    $convs = LaravelChat::getConversations( $currentUser->id );
    //array for storing our users data, as that LaravelChat only provides user id's
    $users = [];
    
    //gathering users
    foreach ( $convs as $conv ) {
        $users = array_merge($users, $conv->getAllUsers());
    }
    //making sure each user appears once
    $users = array_unique($users);
    
    //getting all data of users
    if ( !empty($users) ) {
        $users = User::whereIn('id', $users)->with('profileImage')->getDictionary();
    }
            
    return View::make('conversations_page')
        ->with('users', $users)
        ->with('user', $currentUser)
        ->with('convs', $convs);
}

辅助函数

获取用户的全部对话。如果 userIdnull 则设置当前用户 ID。

get_conversations($userId = null);

创建选定用户之间的对话,在数组中必须包含 id 列表。

set_conversation($users = []);

删除用户的所有对话。如果 userIdnull 则设置当前用户 ID。

delete_conversation($convId, $userId = null);

检查用户是否在对话中。如果 userIdnull 则设置当前用户 ID。

in_conversation($convId, $userId = null);

将消息添加到对话中。如果 userIdnull 则设置当前用户 ID。

conversation_add_message($convId, $content, $userId = null);

将消息添加到两个用户之间的对话中,如果不存在则创建对话,或添加到已存在的对话中。如果 senderIdnull 则设置当前用户 ID。

conversation_add_message_between($content, $receiverId, $senderId = null);

获取用户未读消息的数量。如果 userIdnull 则设置当前用户 ID。

conversation_unread_count($userId = null);

获取两个用户之间的对话。如果 senderIdnull 则设置当前用户 ID。

conversation_between($receiverId, $senderId = null);

获取对话消息。如果 userIdnull 则设置当前用户 ID。

conversation_messages($convId, $userId = null, $newToOld = true);
conversation_messages_unread($convId, $userId = null, $newToOld = true);

标记消息。如果 userIdnull 则设置当前用户 ID。

conversation_mark_as_archived($msgId, $userId = null);
conversation_mark_as_deleted($msgId, $userId = null);
conversation_mark_as_unread($msgId, $userId = null);
conversation_mark_as_read($msgId, $userId = null);

conversation_mark_as_read_all($convId, $userId = null);
conversation_mark_as_unread_all($convId, $userId = null);

致谢

tzookb/tbmsg