---
title: "Fasáda OpeningHours — Opening Hours for Laravel | Roundly"
description: "Každý zápis aj čítanie cez jednu fasádu — sync, edit, exceptions(), delete(force:), refresh, validate — a dotazovací objekt, ktorý vracia."
url: https://roundly-consulting.com/sk/open-source/navody/opening-hours-for-laravel/fasada
language: sk
---

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

[Opening Hours for Laravel](https://roundly-consulting.com/sk/open-source/navody/opening-hours-for-laravel.md)

# Fasáda OpeningHours

Všetko ide cez fasádu OpeningHours nad RoundlyConsulting\\OpeningHours\\OpeningHoursManager — je to odporúčaný spôsob použitia. Manažér je registrovaný ako scoped (jedno memo na request alebo job) a má globálny alias OpeningHours (config facade\_alias). Metódy traitu vlastníka sú skratky k tým istým volaniam — $clinic->setOpeningHours() je OpeningHours::sync($clinic):

```php
use RoundlyConsulting\OpeningHours\DataTransferObjects\ExceptionData;
use RoundlyConsulting\OpeningHours\Facades\OpeningHours;

OpeningHours::sync($clinic, ['week' => ['monday' => ['09:00-17:00']]]); // replace the whole definition
OpeningHours::for($clinic)->isOpen();                                   // the query object
OpeningHours::edit($clinic)->closed('2026-12-24')->save();              // builder, optimistic save

// One exception at a time — locked, validated against the whole definition, never stale:
OpeningHours::exceptions($clinic)->closed('2026-12-24', label: 'Christmas Eve');
OpeningHours::exceptions($clinic)->open('2026-12-31', ['09:00-13:00']);
OpeningHours::exceptions($clinic, 'pickup')->add(ExceptionData::make('12-26', label: 'St Stephen'));
OpeningHours::exceptions($clinic)->all();                               // list<ExceptionData>, with ids
OpeningHours::exceptions($clinic)->remove($ruleId);                     // false for another calendar's rule

OpeningHours::delete($clinic);                                          // soft; the next sync restores it
OpeningHours::delete($clinic, 'pickup', force: true);                   // gone for good
```

Ak vlastník pod daným kľúčom nemá živý kalendár, zápis výnimky vyhodí CalendarNotFoundException — kalendár najprv vytvorte cez sync(). delete() je predvolene soft, takže ďalší sync kalendár obnoví; force: true ho odstráni natrvalo, aj keď už je soft-deleted.

## Všetky metódy

| Metóda | Účel |
| --- | --- |
| `for($owner, ?$calendar)` | Dotazovací objekt — rovnako ako $owner->openingHours(). |
| `calendar($owner, ?$calendar)` | Živá hlavička ?Calendar (null pre neuloženého vlastníka). |
| `has($owner, ?$calendar)` | Či kalendár existuje. |
| `edit($owner, ?$calendar)` | CalendarBuilder naplnený aktuálnou definíciou. |
| `sync($owner, $data, ?$calendar, ?$expectedRevision)` | Úplné nahradenie; vstup v poli sa najprv parsuje a validuje. |
| `make($data, ?$timezone)` | OpeningHours v pamäti — bez databázy. |
| `exceptions($owner, ?$calendar)` | Handle CalendarExceptions — closed(), open(), add(), all(), remove() — na zápis jednotlivých výnimiek bezpečný pri súbežnosti. |
| `delete($owner, ?$calendar, force: false)` | Predvolene soft delete (ďalší sync ho obnoví); force: true ho odstráni natrvalo, aj keď už je soft-deleted; false, ak neexistuje. |
| `refresh($owner, ?$calendar)` | Zvýši revíziu po raw SQL alebo zmene hooku časového pásma. |
| `validate($payload, ?$options)` | ViolationList — nič sa nezapíše. |
| `definitionData($calendar)` | Uložená definícia hlavičky Calendar ako CalendarData, cez memo a cache. |
| `flushMemo()` | Vyprázdni memo v rámci requestu. |
| `fake()` | Nahradí manažéra zaznamenávajúcim OpeningHoursFake — pozrite Testovanie. |

## Dve triedy s názvom OpeningHours

Dotazovací objekt má rovnaký krátky názov ako fasáda — ak súbor potrebuje oba, jeden z nich aliasujte:

```php
use RoundlyConsulting\OpeningHours\Facades\OpeningHours as Hours;
use RoundlyConsulting\OpeningHours\OpeningHours;

Hours::for($clinic, 'pickup')->forWeek()->grouped();
Hours::has($clinic, 'pickup');
Hours::validate($request->input('hours', []))->toMessageBag('hours');

$preview = OpeningHours::make(['week' => ['saturday' => ['22:00-03:00']]], 'Europe/Bratislava');
```

Chcete rovnaké API bez statických volaní? Pozrite si časť DI a akcie.

## 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/opening-hours-for-laravel.md)
