---
title: "Vlastníci a kalendáre — Opening Hours for Laravel | Roundly"
description: "Z akéhokoľvek Eloquent modelu urobíte vlastníka traitom HasOpeningHours, pridáte mu viac pomenovaných kalendárov a nastavíte časové pásmo."
url: https://roundly-consulting.com/sk/open-source/navody/opening-hours-for-laravel/vlastnici-a-kalendare
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)

# Vlastníci a kalendáre

Na akomkoľvek modeli — ambulancia, obchod, pobočka, osoba, zasadačka — implementujte kontrakt OpeningHoursOwner s traitom HasOpeningHours. Prepíšte openingHoursTimezone(), ak sa majú kalendáre bez vlastného pásma vyhodnocovať v pásme vlastníka:

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\OpeningHours\Concerns\HasOpeningHours;
use RoundlyConsulting\OpeningHours\Contracts\OpeningHoursOwner;

final class Clinic extends Model implements OpeningHoursOwner
{
    use HasOpeningHours;

    // Optional: evaluate calendars without their own timezone in the clinic's.
    public function openingHoursTimezone(): ?string
    {
        return $this->timezone;
    }
}
```

openingHours() je metóda, ktorá vracia dotazovací objekt, nie vzťah — čítanie $clinic->openingHours ako vlastnosti vyhodí výnimku. Vzťahom je openingHoursCalendars(); použite ho na eager loading a pri whenLoaded() v resources.

## Pomenované kalendáre

Vlastník môže mať viac nezávislých kalendárov — default, pickup, reception… Každá metóda prijíma voliteľný kľúč kalendára; bez neho použije opening-hours.default\_calendar:

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

OpeningHours::sync($clinic, ['week' => ['monday' => ['14:00-16:00']]], 'pickup'); // a second calendar

OpeningHours::for($clinic, 'pickup')->isOpenDuring($from, $to);
OpeningHours::has($clinic, 'pickup');        // bool
OpeningHours::calendar($clinic, 'pickup');   // ?Calendar — the live header

// The owner trait is shorthand for the same calls:
$clinic->openingHours('pickup');
$clinic->hasOpeningHours('pickup');
$clinic->openingHoursCalendar('pickup');
$clinic->openingHoursCalendars;              // every calendar of the owner (MorphMany)
```

## API vlastníka

| Metóda | Účel |
| --- | --- |
| `openingHoursCalendars()` | Vzťah MorphMany na všetky hlavičky kalendárov vlastníka — na eager loading a whenLoaded(). |
| `openingHoursCalendar(?$calendar)` | Živá hlavička ?Calendar pre kľúč; načítaný vzťah sa použije bez dotazu. |
| `openingHours(?$calendar)` | Dotazovací objekt OpeningHours; ak kľúč ešte neexistuje, prázdny (zatvorený) kalendár. |
| `hasOpeningHours(?$calendar)` | Či kalendár existuje. |
| `setOpeningHours($data, ?$calendar, ?$expectedRevision)` | Úplné nahradenie z poľa alebo CalendarData; vráti nový OpeningHours. |
| `editOpeningHours(?$calendar)` | CalendarBuilder naplnený aktuálnou definíciou; optimistické save(). |
| `openingHoursTimezone()` | Hook — časové pásmo vlastníka; predvolene null. |
| `openingHoursDynamicExceptions()` | Hook — zoznam DynamicExceptionProvider; predvolene \[\]. |
| `withOpeningHours(definitions: false)` | Scope — eager loading hlavičiek kalendárov (s definitions: true aj celé definície). |
| `whereOpenAt() / whereOpenThroughout()` | Scopy nad materializovanými intervalmi (voliteľné). |

## Mazanie vlastníkov

Pri zapnutom delete\_with\_owner (predvolene) trvalé zmazanie vlastníka — modelu bez SoftDeletes alebo cez forceDelete() — odstráni aj jeho kalendáre. Soft delete vlastníka ich ponechá. Hromadné mazanie, napríklad Clinic::query()->delete(), nespúšťa udalosti modelu a kalendáre ponechá, pretože polymorfný vlastník nemôže mať cudzí kľúč.

Použitie traitu na modeli, ktorý neimplementuje OpeningHoursOwner, vyhodí InvalidOwnerException.

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