'datetime', 'end_at' => 'datetime', ]; /* owning calendar */ public function calendar(): BelongsTo { return $this->belongsTo(Calendar::class, 'calendarid'); } /* ui-specific metadata (category, reminders, extra json) */ public function meta(): HasOne { return $this->hasOne(EventMeta::class, 'event_id'); } /** * filter events in event_meta by start and end time */ public function scopeInRange($query, $start, $end) { return $query->whereHas('meta', function ($q) use ($start, $end) { $q->where('start_at', '<=', $end) ->where(function ($qq) use ($start) { $qq->where('end_at', '>=', $start) ->orWhereNull('end_at'); // open-ended events }); }); } /** * ccnvenience wrapper for calendar controller */ public static function forCalendarsInRange($calendarIds, $start, $end) { return static::query() ->with('meta') // eager-load meta once ->whereIn('calendarid', $calendarIds) ->inRange($start, $end) // ← the scope above ->get(); } }