blog/app/Models/Category.php

61 lines
1.2 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Str;
class Category extends Model
{
use HasFactory;
protected $fillable = [
'name',
'slug',
'description',
'cover_image',
'sort_order',
'is_active',
];
protected $casts = [
'is_active' => 'boolean',
];
protected static function boot()
{
parent::boot();
static::creating(function ($category) {
if (empty($category->slug)) {
$category->slug = Str::slug($category->name);
}
});
}
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
public function publishedPosts(): HasMany
{
return $this->hasMany(Post::class)
->where('status', 'published')
->where('published_at', '<=', now());
}
public function scopeActive($query)
{
return $query->where('is_active', true);
}
public function scopeOrdered($query)
{
return $query->orderBy('sort_order')->orderBy('name');
}
}