Modely a dopyty
Query scopes
use RoundlyConsulting\Messages\Models\Message;
use RoundlyConsulting\Messages\Models\Participant;
use RoundlyConsulting\Messages\Models\Thread;
Thread::query()->direct();
Thread::query()->forParticipant($user);
Thread::query()->between($alice, $bob);
Thread::query()->inboxFor($user);
Thread::query()->visibleTo($user);
Message::query()->unreadFor($user);
Participant::query()->unread(); // never marked the thread read
Participant::query()->readUpTo($message); // read pointer at or past $message- direct() — len priame vlákna.
- forParticipant($model) — vlákna modelu od najnovšej aktivity.
- between($a, $b) — priame vlákno presne týchto dvoch modelov.
- inboxFor($model) — dopyt schránky s prednačítaním a unread_count.
- visibleTo(?$model) — verejné vlákna a vlákna modelu; pri null len verejné.
- unreadFor($model) — správy, ktoré model neprečítal, okrem vlastných.
- Participant::unread() — účastníci, ktorí svoje vlákno nikdy nečítali.
- Participant::readUpTo($message) — účastníci, ktorých ukazovateľ prečítania je na danej správe alebo za ňou (to používa seenBy()).
Vzťahy a atribúty
// Thread
$thread->participants; // HasMany<Participant>
$thread->messages; // HasMany<Message>
$thread->latestMessage; // BelongsTo<Message>, via last_message_id
$thread->notifiableParticipants($sender); // Notifiable participant models, minus the sender
$thread->last_activity_at; // touched on every send, join and leave
// Message
$message->message; // the body column
$message->type; // MessageType::Text|System
$message->meta; // ?array — quote snapshot, system params, your own keys
$message->thread; // BelongsTo<Thread>
$message->sender; // MorphTo — null for system messages
$message->parent; // BelongsTo<Message> — the quoted message
$message->replies; // HasMany<Message>
$message->preview(); // truncated to preview.length, type-aware
// Participant
$participant->participant; // MorphTo — the User, Company, …
$participant->thread; // BelongsTo<Thread>
$participant->role; // ?ParticipantRole
$participant->last_read_message_id; // the read pointer — the message they had reached
$participant->read_at; // ?Carbon — when they last readVšetky tri modely používajú soft deletes a sú uložené v messaging_threads, messaging_messages a messaging_participants.
Výmena modelu
Modely nie sú final — rozšírte ich a príslušný kľúč models.* nasmerujte na svoju podtriedu:
use RoundlyConsulting\Messages\Models\Message;
class ChatMessage extends Message
{
// your own casts, relations and methods
}
// config/messages.php
'models' => [
'message' => App\Models\ChatMessage::class,
'thread' => RoundlyConsulting\Messages\Models\Thread::class,
'participant' => RoundlyConsulting\Messages\Models\Participant::class,
],Nakonfigurované triedy sa používajú na každom mieste — vo vzťahoch, akciách, scopes, v manageri aj v príkaze prune. Bez nastavenia alebo pri prázdnej hodnote sa použije model balíka; akákoľvek iná hodnota musí byť týmto modelom alebo jeho podtriedou, inak vyhodí InvalidConfigurationException s názvom kľúča — cudzia trieda sa nikdy potichu nenahradí.
Stránkované zoznamy
Fasáda stránkuje vlákna aj správy vlákna so správnym prednačítaním a deterministickým poradím:
use RoundlyConsulting\Messages\Facades\Messages;
Messages::threads($user, perPage: 20); // $user's threads + every public thread
Messages::threads(); // public threads only
Messages::thread($thread)->messages(perPage: 25); // newest first, senders eager loadedthreads() radí od najnovšej aktivity a prednačíta poslednú správu aj jej odosielateľa; používa scope visibleTo(). Oba predvolene vracajú 15 položiek na stránku a prijímajú page a pageName.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.