Files
Helpddesk/Modules/Documentation/Models/DocumentationCategory.php

88 lines
2.0 KiB
PHP
Executable File

<?php
namespace Modules\Documentation\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Str;
/**
* @property int $id
* @property string $name
* @property string $slug
* @property string|null $icon
* @property string $colour
* @property string|null $description
* @property int $sort_order
* @property bool $is_active
*/
class DocumentationCategory extends Model
{
use HasFactory;
/** @var list<string> */
protected $fillable = [
'name',
'slug',
'icon',
'colour',
'description',
'sort_order',
'is_active',
'created_by',
'updated_by',
];
/** @var array<string, string> */
protected $casts = [
'is_active' => 'boolean',
'sort_order' => 'integer',
];
/**
* Bootstrap the model.
*/
protected static function booted(): void
{
static::saving(function (DocumentationCategory $category): void {
if (blank($category->slug)) {
$category->slug = Str::slug($category->name);
}
});
}
/**
* Documents assigned to this category.
*
* @return HasMany<DocumentationDocument>
*/
public function documents(): HasMany
{
return $this->hasMany(DocumentationDocument::class, 'documentation_category_id');
}
/**
* Active category scope.
*
* @param Builder<DocumentationCategory> $query
* @return Builder<DocumentationCategory>
*/
public function scopeActive(Builder $query): Builder
{
return $query->where('is_active', true);
}
/**
* Ordered category scope.
*
* @param Builder<DocumentationCategory> $query
* @return Builder<DocumentationCategory>
*/
public function scopeOrdered(Builder $query): Builder
{
return $query->orderBy('sort_order')->orderBy('name');
}
}