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

Účastníkmi nemusia byť len používatelia — cez polymorfnú tabuľku účastníkov sa môže zúčastniť akýkoľvek Eloquent model: zákazník, zamestnanec, zasadačka či vozidlo. Pridajte HasAppointments každému modelu, ktorý má vidieť svoje termíny:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Appointments\Concerns\HasAppointments;

class User extends Authenticatable
{
    use HasAppointments;
}

class Room extends Model
{
    use HasAppointments;
}

$user->appointments()->upcoming()->ordered()->get();   // appointments the user takes part in
$room->appointments()->between($monday, $friday)->get();
$user->appointmentParticipations;                       // the participant rows (MorphMany)

appointments() vracia query builder, nie vzťah, takže pred get() môžete reťaziť ľubovoľné scopes. appointmentParticipations() je MorphMany riadkov účastníka.

Roly a meta údaje účastníka

Každému účastníkovi môžete dať voliteľnú rolu a ľubovoľné meta údaje — príznak hostiteľa, počet osôb, číslo miesta:

use RoundlyConsulting\Appointments\Enums\ParticipantRole;
use RoundlyConsulting\Appointments\Facades\Appointments;

Appointments::schedule('Property viewing')
    ->startingAt('2026-07-03 14:00')
    ->lasting(30)
    ->withParticipant($agent, ParticipantRole::Organiser)
    ->withParticipant($buyer, ParticipantRole::Attendee, ['party_size' => 2])
    ->withParticipant($partner, ParticipantRole::Optional)
    ->withParticipant($flat)            // any Eloquent model — role stays null
    ->create();
PrípadHodnotaPoznámka
ParticipantRole::OrganiserorganiserOsoba, ktorá termín vedie.
ParticipantRole::AttendeeattendeeVracia ho ParticipantRole::default().
ParticipantRole::OptionaloptionalPozvaný, no nie povinný.

Čítanie účastníkov

$appointment->participants;                    // HasMany<Participant>, loaded after create()

$participant = $appointment->participants->first();
$participant->participant;                     // MorphTo — the underlying model (e.g. a User)
$participant->appointment;                     // BelongsTo<Appointment>
$participant->role;                            // ?ParticipantRole
$participant->meta?->get('party_size');        // meta is cast to a Collection

Dodatočné pridávanie a odoberanie účastníkov

Appointments::for($appointment)->participants() spravuje, kto sa na jednej rezervácii zúčastňuje:

use RoundlyConsulting\Appointments\Enums\ParticipantRole;
use RoundlyConsulting\Appointments\Facades\Appointments;

$participants = Appointments::for($appointment)->participants();

$row = $participants->add($interpreter, ParticipantRole::Optional, meta: ['language' => 'sk']);
$participants->add($room, preventConflicts: true);   // refuse if the room is booked then

$participants->has($interpreter);    // true
$participants->all();                // the participant rows (role, meta), models eager-loaded
$participants->remove($interpreter); // by model…
$participants->remove($row);         // …or by one of this appointment's participant rows
  • Pridanie modelu, ktorý sa už zúčastňuje, vyhodí DuplicateParticipantException.
  • S preventConflicts: true (alebo prevent_conflicts v konfigurácii) pridanie modelu, ktorý má v čase termínu inú rezerváciu, vyhodí SchedulingConflictException.
  • Odobratie modelu, ktorý sa nezúčastňuje — alebo riadka účastníka, ktorý patrí inému termínu — vyhodí ParticipantNotFoundException. Nič sa nezmaže.
  • Odobratie zmaže riadok cez soft delete a spustí ParticipantDeleted. Opätovné pridanie toho istého modelu riadok obnoví s novou rolou a meta údajmi (ParticipantUpdated); prvé pridanie spustí ParticipantCreated.

Oba modely používajú soft deletes: zmazanie účastníka aj termínu ponechá riadok s časovou značkou deleted_at.

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.