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); // 0Pre 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 — tretí účastník by z neho urobil skupinu.
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.
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)Messages::start()->direct()->…->create() vytvorí zakaždým nové priame vlákno — ak chcete „nájdi alebo vytvor“, použite Messages::direct() alebo conversationWith().
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.