dominservice / conversations
此包将允许您将完整的用户消息系统添加到您的Laravel应用程序中。
Requires
- php: >=8.0
- laravel/framework: ^9|^10
README
对话
此包将允许您将完整的用户消息系统添加到您的Laravel应用程序中。
注意
此包适用于Laravel
重要
由于结构发生了重大变化,此包是 dominservice/laravel_chat 包的延续,因此我决定创建一个单独的仓库。如果您有之前的版本,可以在保留数据库内容的同时卸载它,新包包含迁移,将数据移动到新结构。请在执行此操作之前记得备份!
安装
composer require dominservice/conversations
或者手动在 composer.json 中放置
"require": {
"dominservice/conversations": "^1.0"
}
运行
composer update
将服务提供者添加到 config/app.php
'providers' => [ Dominservice\Conversations\ConversationsServiceProvider::class, ], (...) 'aliases' => [ 'Conversations' => Dominservice\Conversations\Facade\Conversations::class, ]
发布配置
php artisan vendor:publish --provider="Dominservice\Conversations\ConversationsServiceProvider"
迁移
php artisan migrate
记住
在 config/conversations.php 文件中配置此包
使用方法
创建新的对话
$convs = (new Dominservice\Conversations\Conversations)->create($users, $relationType = null, $relationId = null, $content = null, $getObject = false);
或者使用辅助工具进行简短操作
$convs = conversation_create($users, $relationType = null, $relationId = null, $content = null, $getObject = false);
如果 $getObject === true
,您将获得包含所有关联和用户的“Dominservice\Conversations\Entities\Conversation”对话对象,否则方法仅返回对话ID
如果存在,向对话中添加消息或创建
$messageId = (new Dominservice\Conversations\Conversations)->addMessageOrCreateConversation($users, $content, $relationType = null, $relationId = null);
或者使用辅助工具进行简短操作
$messageId = conversation_add_or_create($users, $content, $relationType = null, $relationId = null);
向对话中添加消息
$messageId = (new Dominservice\Conversations\Conversations)->addMessage($convUuid, $content, $addUser = false);
或者使用辅助工具进行简短操作
$messageId = conversation_add_message($convUuid, $content, $addUser = false);
获取用户之间的对话ID
$conversationId = (new Dominservice\Conversations\Conversations)->getIdBetweenUsers(array $users, $relationType = null, $relationId = null);
或者使用辅助工具进行简短操作
$conversationId = conversation_id_between($users, $relationType = null, $relationId = null);
检查用户是否在对话中
$existsUser = (new Dominservice\Conversations\Conversations)->existsUser($convUuid, $userId);
或者使用辅助工具进行简短操作
$existsUser = conversation_user_exists($convUuid, $userId = null);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id
获取所有未读消息的数量
$count = (new Dominservice\Conversations\Conversations)->getUnreadCount($userId);
或者使用辅助工具进行简短操作
$count = conversation_unread_count($userId = null);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id
获取特定对话中未读消息的数量
$count = (new Dominservice\Conversations\Conversations)->getConversationUnreadCount($convUuid, $userId);
或者使用辅助工具进行简短操作
$count = conversation_unread_count_per_id($convUuid, $userId = null);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id
删除对话
此方法将所选用户对话中所有消息的状态设置为 DELETED。如果所有用户的所有消息状态均为 DELETED,则永久删除对话的所有值。
(new Dominservice\Conversations\Conversations)->delete($convUuid, $userId);
或者使用辅助工具进行简短操作
conversation_delete($convUuid, $userId = null);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id
获取特定用户的全部对话
$conversations = (new Dominservice\Conversations\Conversations)->getConversations($userId, $relationType = null, $relationId = null);
这将返回一个包含“Dominservice\Conversations\Entities\Conversation”对象的“Illuminate\Support\Collection”。对于每个对话,您将拥有对话的最后一条消息和对话的用户。示例
foreach ( $conversations as $conv ) { $getNumOfUsers = $conv->getNumOfUsers(); $users = $conv->users; /* Collection */ /* $lastMessage Dominservice\Conversations\Entities\Message */ $lastMessage = $conv->getLastMessage(); $senderId = $lastMessage->sender; $content = $lastMessage->content; $status = $lastMessage->status; }
或者使用辅助工具进行简短操作
$conversations = conversations($userId = null, $relationType = null, $relationId = null, $withUsersList = true);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id,并且辅助工具将用户和对话设置为数组。
获取对话的消息
$messages = (new Dominservice\Conversations\Conversations)->getMessages($convUuid, $userId, $newToOld = true, $limit = null, $start = null);
或者使用辅助工具进行简短操作
$messages = conversation_messages($convUuid, $userId = null, $newToOld = true, $limit = null, $start = null);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id
获取对话中的未读消息
$messages = (new Dominservice\Conversations\Conversations)->getUnreadMessages($convUuid, $userId, $newToOld = true, $limit = null, $start = null);
或者使用辅助工具进行简短操作
$messages = conversation_messages_unread($convUuid, $userId = null, $newToOld = true, $limit = null, $start = null);
在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id
设置消息的状态
标记消息。如果 userId
为 null
,则设置当前用户ID。
conversation_mark_as_archived($convUuid, $msgId, $userId = null); conversation_mark_as_deleted($convUuid, $msgId, $userId = null); conversation_mark_as_unread($convUuid, $msgId, $userId = null); conversation_mark_as_read($convUuid, $msgId, $userId = null); conversation_mark_as_read_all($convUuid, $userId = null); conversation_mark_as_unread_all($convUuid, $userId = null);
示例
public function conversations() { $currentUser = Auth::user(); //get the conversations $conversations = conversations($currentUser->id); //array for storing our users data, as that Conversations only provides user id's $users = collect(); //gathering users foreach ( $conversations as $conv ) { $users->push($conv->users); } //making sure each user appears once $users = $users->unique(); return View::make('conversations_page') ->with('users', $users) ->with('user', $currentUser) ->with('conversations', $conversations); }