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 kryptomienOdoslaní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.