mergeCasts(['is_starred' => 'boolean']); } public function tags(): MorphToMany { return $this->morphToMany(Tag::class, 'taggable')->orderBy('tags.title'); } /** * @param array $filters */ public function scopeMarked(Builder $query, array $filters): Builder { $tagIds = array_values(array_filter(array_map('intval', (array) ($filters['tag_ids'] ?? [])))); return $query ->when( filter_var($filters['starred'] ?? false, FILTER_VALIDATE_BOOL), fn (Builder $q) => $q->where($this->qualifyColumn('is_starred'), true), ) ->when($tagIds, fn (Builder $q) => $q->whereHas('tags', fn (Builder $tags) => $tags->whereIn('tags.id', $tagIds))); } }