'boolean', 'sort_order' => 'integer', ]; // Auto-generate slug jika tidak disediakan protected static function booted(): void { static::creating(function (Category $category) { if (empty($category->slug)) { $category->slug = Str::slug($category->name); } }); } // === Relationships === public function documents(): HasMany { return $this->hasMany(Document::class); } public function knowledgeItems(): HasMany { return $this->hasMany(KnowledgeItem::class); } public function creator() { return $this->belongsTo(User::class, 'created_by'); } // === Scopes === public function scopeActive(Builder $query): Builder { return $query->where('is_active', true); } public function scopeOrdered(Builder $query): Builder { return $query->orderBy('sort_order')->orderBy('name'); } // === Accessors === public function getActiveDocumentCountAttribute(): int { return $this->documents()->where('is_active', true)->count(); } }