NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Messages for Laravel

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 read

Vš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 loaded

threads() 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 kryptomien

Odoslaní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.