File "Category.php"

Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Models/Category.php
File size: 2.28 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Models;

use \DateTimeInterface;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

class Category extends Model implements HasMedia
{
    use InteractsWithMedia, HasFactory;

    public const STATUS_RADIO = [
        '1' => 'Enable',
        '0' => 'Disable',
    ];

    public $table = 'categories';

    protected $appends = [
        'featured_image',
    ];

    protected $dates = [
        'created_at',
        'updated_at',
        'deleted_at',
    ];

    protected $casts = [
        'created_at'  => 'date:m-d-Y',
        'updated_at'  => 'date:m-d-Y',
    ];

    protected $fillable = [
        'name',
        'slug',
        'parent_id',
        'status',
        'show_in_navigation',
        'created_at',
        'updated_at',
        'deleted_at',
    ];

    public function registerMediaConversions(Media $media = null): void
    {
        $this->addMediaConversion('thumb')->fit('crop', 50, 50)->nonQueued();
        $this->addMediaConversion('preview')->fit('crop', 120, 120)->nonQueued();
    }

    public function getFeaturedImageAttribute()
    {
        $file = $this->getMedia('featured_image')->last();
        if ($file) {
            $file->url       = $file->getUrl();
            $file->thumbnail = $file->getUrl('thumb');
            $file->preview   = $file->getUrl('preview');
        }

        return $file;
    }

    public function categories()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }

    public function categoryTree()
    {
        return $this->hasMany(Category::class, 'parent_id')->with('categories');
    }

    public function products()
    {
        return $this->hasMany(Product::class, 'category_id');
    }
    public function parent()
    {
        return $this->belongsTo(Category::class, 'parent_id');
    }

    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }

    protected function getStatusNameAttribute()
    {
        return self::STATUS_RADIO[$this->status];
    }

    public function scopeActive($query)
    {
        return $query->where('status', 1);
    }
}