hasMany(Event::class, 'calendarid'); // FK in calendarobjects } /* ui-specific metadata (color, sharing flags, json settings) */ public function meta(): HasOne { return $this->hasOne(CalendarMeta::class, 'calendar_id'); } /* get instances */ public function instances() { return $this->hasMany(CalendarInstance::class, 'calendarid'); } /* get the primary? instance for a user */ public function instanceForUser(?User $user = null) { $user = $user ?? auth()->user(); return $this->instances() ->where('principaluri', 'principals/' . $user->email) ->first(); } /** * convert "/calendar/{slug}" into the correct calendar instance (uri column) * * @param mixed $value The URI segment (instance UUID). * @param string|null $field Ignored in our override. */ public function resolveRouteBinding($value, $field = null): mixed { return $this->whereHas('instances', function (Builder $q) use ($value) { $q->where('uri', $value) ->where('principaluri', Auth::user()->principal_uri); }) ->with('instances') ->firstOrFail(); } }