---
title: "Účastníci — Appointments for Laravel | Roundly"
description: "Pripojte akýkoľvek Eloquent model ako účastníka s rolou a meta údajmi, vypíšte jeho termíny cez HasAppointments a pridávajte či odoberajte ľudí neskôr."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/ucastnici
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Appointments for Laravel](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)

# Účastníci

Úč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:

```php
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:

```php
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ípad | Hodnota | Poznámka |
| --- | --- | --- |
| `ParticipantRole::Organiser` | organiser | Osoba, ktorá termín vedie. |
| `ParticipantRole::Attendee` | attendee | Vracia ho ParticipantRole::default(). |
| `ParticipantRole::Optional` | optional | Pozvaný, no nie povinný. |

## Čítanie účastníkov

```php
$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:

```php
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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)
