laravel-messages maintained by centrex
Manage messages in Laravel
Thread-based polymorphic messaging for any Eloquent model. Supports multi-participant conversations, read/unread tracking, and soft-deletes on both threads and messages.
Installation
composer require centrex/laravel-messages
php artisan vendor:publish --tag="laravel-messages-migrations"
php artisan migrate
Usage
1. Add the trait to your model
use Centrex\Messages\Concerns\HasMessages;
class User extends Authenticatable
{
use HasMessages;
}
2. Create a thread and add messages
use Centrex\Messages\Models\Thread;
// Create a new thread
$thread = Thread::create(['subject' => 'Order inquiry']);
// Add participants
$thread->addParticipant($user);
$thread->addParticipant($support);
// or multiple at once
$thread->addParticipants([$user, $support, $manager]);
// Post a message
$thread->addMessage(['body' => 'When will my order ship?'], $user);
3. Read threads and messages
// All threads a user participates in
$user->threads;
// Threads with unread messages
Thread::forModelWithNewMessages($user)->get();
// All threads for a participant
Thread::forModel($user)->get();
// Latest message in a thread
$thread->getLatestMessage();
// All messages in a thread
$thread->messages;
// Who started the thread
$thread->creator();
4. Unread tracking
// Mark thread as read by user
$thread->markAsRead($user);
// Check if thread has unread messages for user
$thread->isUnread($user); // bool
// Count of threads with new messages
$user->newMessagesCount();
// IDs of threads with new messages
$user->threadsWithNewMessages();
5. Participant management
$thread->hasParticipant($user); // bool
$thread->activateAllParticipants(); // restore soft-deleted participants
Testing
composer test # full suite
composer test:unit # pest only
composer test:types # phpstan
composer lint # pint
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.