Ak chcete filtrovať vlastníkov v SQL — „ambulancie otvorené teraz“ v katalógu —, zapnite materializáciu, naplánujte príkaz na denné spúšťanie a použite scopy:
OPENING_HOURS_MATERIALIZE=true
OPENING_HOURS_MATERIALIZE_DAYS_AHEAD=60
OPENING_HOURS_MATERIALIZE_DAYS_BEHIND=1// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('opening-hours:materialize')->daily();
// anywhere
Clinic::query()->whereOpenAt(now())->get();
Clinic::query()->whereOpenThroughout($start, $end, 'pickup')->get();- Tabuľka opening_hours_intervals uchováva zlúčené obdobia otvorenia ako riadky v UTC pre [dnes − days_behind, dnes + days_ahead], vyhodnotené tak, ako ich vidí vlastník — s jeho hookom časového pásma a dynamickými poskytovateľmi, aj keď je vlastník soft-deleted.
- Každá zmena zaradí unikátny MaterializeIntervalsJob pre daný kalendár na materialize.connection a materialize.queue — ďalší nepribudne, kým jeden ešte čaká.
- Scopy prijímajú okamihy od teraz − days_behind po teraz + days_ahead − 1 deň — odpočítaný deň pokrýva čas od posledného denného behu. Okamihy mimo tohto horizontu vyhodia OutsideMaterializedHorizonException namiesto tichej odpovede „zatvorené“.
- whereOpenAt($at, ?$calendar) a whereOpenThroughout($start, $end, ?$calendar) pridajú EXISTS naviazaný na vlastníka; zmazané kalendáre nemajú žiadne intervaly.
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.