<?php namespace App\Models; use App\Http\Controllers\Traits\MediaUploadingTrait; 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 OfficeSupplies extends Model implements HasMedia { use HasFactory, InteractsWithMedia, MediaUploadingTrait; protected $table = "office_supplies"; public const STATUS_RADIO = [ '1' => 'Enable', '0' => 'Disable', ]; protected $fillable = [ 'vendor_id', 'name', 'sku', 'description', 'price', 'status', ]; protected $dates = [ 'created_at', 'updated_at', ]; protected $casts = [ 'created_at' => 'date:m-d-Y', 'updated_at' => 'date:m-d-Y', ]; protected $appends = [ 'supply_featured_image', ]; 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 getSupplyFeaturedImageAttribute() { $file = $this->getMedia('featured_image')->last(); if ($file) { $file->url = $file->getUrl(); $file->thumbnail = $file->getUrl('thumb'); $file->preview = $file->getUrl('preview'); } return $file; } protected function getStatusNameAttribute() { return self::STATUS_RADIO[$this->status]; } public function scopeActive($query) { return $query->where('status', 1); } public function vendor() { return $this->belongsTo(Vendor::class, 'vendor_id', 'id'); } }