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

Priame správy

Najčastejší prípad zvládne jedno volanie — Messages::direct() nájde priamu konverzáciu dvoch modelov alebo ju vytvorí:

use RoundlyConsulting\Messages\Facades\Messages;

$thread = Messages::direct($alice, $bob);   // find-or-create the DM
Messages::send($thread, $alice, 'Hi Bob!');

Messages::unreadCount($bob);          // 1
Messages::markRead($thread, $bob);
Messages::unreadCount($bob);          // 0

Pre tých istých dvoch účastníkov vráti vždy to isté priame vlákno, takže duplicitné konverzácie nevzniknú. Hľadá priame vlákno, ktorého účastníkmi sú presne títo dvaja, a to od najstaršieho, takže každé vyhľadanie vráti to isté vlákno.

Bezpečné aj pri súbežnom prvom kontakte

Duplicita nevznikne ani vtedy, keď obe strany nadviažu prvý kontakt v tej istej chvíli: priama konverzácia nesie unikátny kľúč dvojice (direct_key), databáza druhý insert odmietne a prehrávajúca strana dostane vlákno víťaza. Priama konverzácia, ktorá bola zmazaná alebo ju niekto opustil, kľúč odovzdá novej.

Priamo z modelu

Trait HasMessaging ponúka ten istý postup ako skratku — conversationWith() v skutočnosti volá Messages::direct():

$thread = $alice->conversationWith($bob); // find-or-create the DM
$alice->sendMessageTo($thread, 'Hi Bob!');

$bob->unreadCount();          // 1
$bob->markThreadRead($thread);
$bob->unreadCount();          // 0

Čím sa priame vlákna líšia

  • Vždy súkromné — is_public aj everyone_can_join sú vynútene false bez ohľadu na konfiguráciu verejnosti.
  • Bez rolí — účastníci nemajú rolu, vynucovanie rolí sa preskakuje a setRole() či transferOwnership() vyhodí ParticipationException::directThreadHasNoRoles().
  • Bez názvu — priame vlákno vzniká bez mena.
  • Uzavreté — keď priame vlákno raz existuje, neprijme nového účastníka od nikoho, ani od dôveryhodného volajúceho, a dokonca ani toho, kto ho opustil: participants()->add() vyhodí ParticipationException::directThreadIsClosed(), takže nikto nemôže k histórii dvojice priviesť tretiu osobu. Pridanie niekoho, kto už v konverzácii je, stále vráti jeho záznam; ak chcete niekoho prizvať, začnite skupinové vlákno.

Dopyty na priame vlákna

use RoundlyConsulting\Messages\Models\Thread;

Thread::query()->direct()->get();                 // every 1:1 thread
Thread::query()->between($alice, $bob)->first();  // the DM of exactly these two, or null

$thread->is_direct;   // true
$thread->is_public;   // always false for a direct thread
$thread->name;        // null
$thread->direct_key;  // the unique pair key — Thread::directKeyFor($alice, $bob)

Priama konverzácia vytvorená builderom — Messages::start()->direct()->withParticipants([...])->create() — dostane ten istý kľúč dvojice, ak má jedného alebo dvoch rôznych účastníkov (jeden znamená poznámku pre seba), takže druhú priamu konverzáciu pre dvojicu, ktorá už jednu má, databáza odmietne výnimkou UniqueConstraintViolationException namiesto toho, aby vznikol duplikát. Viac ako dvaja účastníci vyhodia ParticipationException::directThreadTakesTwo(); priama konverzácia z buildera bez účastníkov zostane bez kľúča. Na „nájdi alebo vytvor“ použite Messages::direct() alebo conversationWith() — tie navyše prevezmú kľúč konverzácie, ktorá už nevyhovuje, builder nie.

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.