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);
}
}