---
title: "Opakované termíny — Appointments for Laravel | Roundly"
description: "Denné, týždenné či mesačné série s intervalom, počtom, koncovým dátumom a dňami v týždni — vytvorené atomicky a prepojené UUID skupiny."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/opakovane-terminy
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)

# Opakované termíny

Odovzdajte builderu pravidlo RecurrenceData a zavolajte createRecurring(). Každý výskyt sa vytvorí ako samostatný termín a výskyty spája spoločné UUID v recurrence\_group:

```php
use RoundlyConsulting\Appointments\DataTransferObjects\RecurrenceData;
use RoundlyConsulting\Appointments\Enums\Frequency;
use RoundlyConsulting\Appointments\Facades\Appointments;

$series = Appointments::schedule('Weekly standup')
    ->startingAt('2026-07-06 09:00')
    ->lasting(30)
    ->withParticipant($team)
    ->recurring(new RecurrenceData(Frequency::Weekly, count: 8, byWeekday: [1])) // Mondays
    ->createRecurring();                // Collection<int, Appointment>
```

## Možnosti pravidla

| Pole | Typ | Predvolené | Význam |
| --- | --- | --- | --- |
| `frequency` | Frequency | — | Frequency::Daily, Frequency::Weekly alebo Frequency::Monthly. |
| `interval` | int | 1 | Každý N-tý deň, týždeň či mesiac — aspoň 1. |
| `until` | ?CarbonImmutable | null | Posledný povolený začiatok, vrátane. Hodnota o polnoci sa číta ako dátum a zahŕňa celý ten deň. |
| `count` | ?int | null | Maximálny počet výskytov — aspoň 1; strop je recurrence.max\_occurrences. |
| `byWeekday` | zoznam int | \[\] | ISO dni v týždni, ktoré nastanú v každom aktívnom dni, týždni či mesiaci — 1 = pondelok … 7 = nedeľa. |

## Príklady

```php
use Carbon\CarbonImmutable;
use RoundlyConsulting\Appointments\DataTransferObjects\RecurrenceData;
use RoundlyConsulting\Appointments\Enums\Frequency;

new RecurrenceData(Frequency::Daily, count: 5);                   // five consecutive days
new RecurrenceData(Frequency::Daily, interval: 2, count: 3);      // every other day, three times
new RecurrenceData(Frequency::Weekly, interval: 2, until: CarbonImmutable::parse('2026-12-31 23:59'));
new RecurrenceData(Frequency::Monthly, count: 3);                 // from Jan 31: Feb 28, then Mar 31 — no overflow
new RecurrenceData(Frequency::Weekly, count: 4, byWeekday: [1, 3]); // Mondays and Wednesdays
new RecurrenceData(Frequency::Weekly, interval: 2, count: 6, byWeekday: [1, 3]); // Monday and Wednesday of every other week
new RecurrenceData(Frequency::Monthly, count: 8, byWeekday: [1]);  // every Monday of each month
new RecurrenceData(Frequency::Daily, until: CarbonImmutable::parse('2026-07-31')); // midnight: a date, July 31 included

new RecurrenceData(Frequency::Daily, interval: 0);                 // throws InvalidRecurrenceException
```

## Ako sa séria vytvára

- Každý výskyt nesie všetko, čo by nieslo samostatné create() — účastníkov, meta údaje, miesto, súradnice, kontakty hostí aj vlastnú žiadosť o schválenie.
- Séria platí celá alebo vôbec: vytvára sa v jednej databázovej transakcii, takže ak ktorýkoľvek výskyt zlyhá — napríklad na SchedulingConflictException pri preventConflicts() — nezostane z nej nič, a keďže eventy čakajú na potvrdenie, nespustí sa pre ňu ani AppointmentCreated, ani event účastníka.
- Pravidlo sa rozvíja v pásme termínu, takže týždenný termín o 9:00 zostane o 9:00 miestneho času aj po zmene letného času.
- Bez filtra dní v týždni je prvým výskytom samotný začiatok a každý ďalší nasleduje o interval dní, týždňov či mesiacov neskôr. Mesačné kroky nikdy nepretečú: séria začínajúca 31. dňa pripadne v kratších mesiacoch na posledný deň.
- S byWeekday nastane od začiatku každý uvedený deň v týždni v každom aktívnom období — obdobím je deň, týždeň (od pondelka) alebo mesiac podľa frekvencie a aktívne je každé interval-té obdobie. interval: 2 s byWeekday: \[1, 3\] je pondelok a streda každý druhý týždeň; Frequency::Monthly s byWeekday: \[1\] je každý pondelok každého aktívneho mesiaca.
- until platí vrátane — výskyt začínajúci presne v čase until sa zachová. until o polnoci sa číta ako dátum a zahŕňa celý ten deň.
- Interval či počet pod jedna alebo deň v týždni mimo 1–7 vyhodí InvalidRecurrenceException už pri vytvorení RecurrenceData.
- Bez count aj until sa pravidlo rozvinie na recurrence.max\_occurrences (predvolene 365) — otvorené pravidlá preto vždy ohraničte. Rovnaký strop platí aj pre count.

## Z DTO

Appointments::createRecurring() prijme AppointmentData a pravidlo — alebo použije recurrence priamo z DTO. Bez akéhokoľvek pravidla vytvorí jediný termín:

```php
use RoundlyConsulting\Appointments\DataTransferObjects\RecurrenceData;
use RoundlyConsulting\Appointments\Enums\Frequency;
use RoundlyConsulting\Appointments\Facades\Appointments;

$series = Appointments::createRecurring($appointmentData, new RecurrenceData(Frequency::Daily, count: 5));
$series = Appointments::createRecurring($appointmentData); // falls back to $appointmentData->recurrence
```

## Práca so sériou

Sériu načítate podľa recurrence\_group; začiatky, ktoré pravidlo vytvorí, si vopred pozriete cez Appointments::occurrences() — nič sa nezapíše a platí rovnaký strop max\_occurrences:

```php
use Carbon\CarbonImmutable;
use RoundlyConsulting\Appointments\Facades\Appointments;
use RoundlyConsulting\Appointments\Models\Appointment;

// every appointment of one series
Appointment::query()
    ->where('recurrence_group', $series->first()->recurrence_group)
    ->ordered()
    ->get();

// preview the start times a rule produces, without writing anything
Appointments::occurrences(CarbonImmutable::parse('2026-07-06 09:00'), $rule); // list<CarbonImmutable>
```

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