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

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:

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:

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

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.