'datetime:Y-m-d H:i:s', 'updated_at' => 'datetime:Y-m-d H:i:s', 'is_enable' => 'boolean', ]; protected $fillable = ['icon', 'is_enable', 'level', 'name', 'parent_id', 'path', 'sort']; protected function icon(): Attribute { return Attribute::make( get: fn($value) => $value ? (Str::startsWith($value, ['http://', 'https://']) ? $value : Storage::url($value)) : '', ); } public function parent() { return $this->belongsTo(static::class, 'parent_id'); } public function children() { return $this->hasMany(static::class, 'parent_id'); } public function articles() { return $this->hasMany(Article::class, 'category_id'); } public function scopeSort($q) { return $q->orderBy('sort', 'desc'); } public function scopeEnable($q) { return $q->where('is_enable', 1); } public function modelFilter() { return \App\Filters\ArticleCategoryFilter::class; } }