JezK
Edit File: Category.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; class Category extends Model { use HasFactory; protected $fillable = [ 'name', 'slug', 'description', 'image', 'parent_id', 'sort_order', 'is_active', ]; protected function casts(): array { return [ 'is_active' => 'boolean', 'sort_order' => 'integer', ]; } // ── Relationships ── public function parent(): BelongsTo { return $this->belongsTo(Category::class, 'parent_id'); } public function children(): HasMany { return $this->hasMany(Category::class, 'parent_id')->orderBy('sort_order'); } public function articles(): BelongsToMany { return $this->belongsToMany(Article::class, 'article_category'); } // ── Scopes ── public function scopeActive($query) { return $query->where('is_active', true); } public function scopeRoots($query) { return $query->whereNull('parent_id'); } public function scopeOrdered($query) { return $query->orderBy('sort_order')->orderBy('name'); } // ── Accessors ── public function getArticleCountAttribute(): int { return $this->articles()->published()->count(); } public function getImageUrlAttribute(): ?string { if ($this->image) { return asset('storage/' . $this->image); } return null; } }