Príprava modelov
Každý model, ktorý sa zapája do správ — odosielateľ alebo účastník — musí implementovať RoundlyConsulting\Messages\Interfaces\ParticipatesInMessaging. Trait HasMessaging pridá pohodlné API:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Messages\Concerns\HasMessaging;
use RoundlyConsulting\Messages\Interfaces\ParticipatesInMessaging;
class User extends Model implements ParticipatesInMessaging
{
use HasMessaging;
public function participateAs(): array
{
return [
'id' => $this->id,
'name' => $this->name,
];
}
}Na čo slúži participateAs()
participateAs() vracia verejnú podobu účastníka. Uveďte v nej len údaje, ktoré môžu vidieť ostatní v konverzácii:
- Broadcast payloady — odosielateľ správy, účastník pri pridaní/prečítaní/odchode a pisateľ pri signáli písania.
- JSON resources — MessageResource.sender a ParticipantResource.participant.
- Systémové správy — pri pridaní a odchode sa ukladá do meta.participant.
Broadcasting modelu, ktorý rozhranie neimplementuje, vyhodí ParticipationException::interfaceImplementationRequired().
Zúčastniť sa môže akýkoľvek model
Účasť je polymorfná, takže rôzne typy modelov — User a Company, zákazník a tím podpory — môžu zdieľať jednu konverzáciu:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Messages\Concerns\HasMessaging;
use RoundlyConsulting\Messages\Interfaces\ParticipatesInMessaging;
class Company extends Model implements ParticipatesInMessaging
{
use HasMessaging;
public function participateAs(): array
{
return ['id' => $this->id, 'name' => $this->name];
}
}
// A User and a Company share one conversation
$thread = $customer->startConversationWith($company, name: 'Order A-1042');
$company->sendMessageTo($thread, 'Your order ships tomorrow.');Zdieľajú stĺpce sender_id a participant_id, preto musia všetky zúčastnené modely používať rovnaký typ primárneho kľúča — nastavte podľa neho key_type (pozri Typy kľúčov).
API traitu HasMessaging
Všetko, čo trait pridáva, na jednom mieste. Je to skratka nad tým istým MessagesManager, ktorý používa fasáda Messages — každý zápis teda spustí tú istú akciu a Messages::fake() ho zaznamená rovnako ako volanie fasády:
$user->participations(); // MorphMany<Participant>
$user->threads(); // Collection<Thread>, newest activity first
$user->conversations(); // alias of threads()
$user->startConversationWith([$bob], name: 'Q3'); // Thread — $user becomes the owner
$user->conversationWith($bob); // Thread — find-or-create the DM
$user->sendMessageTo($thread, 'Hello'); // Message
$user->joinThread($thread); // Participant — self-join, only on threads open to everyone
$user->unreadThreads(); // Collection<Thread> with unread messages
$user->unreadCount(); // int — across every thread
$user->unreadCount($thread); // int — within one thread
$user->markThreadRead($thread); // ParticipantPrejavte 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.