/home2/mshostin/carnival.ms-hostingladz.com/app/Models/Product.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Product extends Model
{
    use HasFactory, SoftDeletes;

    protected $fillable = [
        'user_id',
        'brand_id',
        'title',
        'slug',
        'category_id',
        'subcategory_id',
        'description',
        'old_price',
        'new_price',
        'sale',
        'status',
        'tags',
        'condition',
        'stock_condition',
        'discount',
        'facebook',
        'instagram',
        'youtube',
        'twitter',
        'tiktok',
        'pinterest',
        'linkedin',
        'image',
        'information',
        'reviews',
        'extra',
        'guarantee',
        'feature',
        'women',
        'men',
        'kids',
        'accessories',
    ];

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

    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function subcategory()
    {
        return $this->belongsTo(Subcategory::class);
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function brand()
    {
        return $this->belongsTo(Brand::class);
    }

    public function subvendor()
    {
        return $this->belongsTo(Subvendor::class);
    }

    public function variants()
    {
        return $this->belongsToMany(Variant::class)->withPivot('id', 'name', 'type', 'value', 'status');
    }

    public function product_variant()
    {
        return $this->hasMany(ProductVariant::class, 'product_id');
    }

    public function product_images()
    {
        return $this->hasMany(ProductVariantImage::class, 'product_id');
    }

    public function isAvailable()
    {
        return $this->stock_condition === 'In Stock';
    }

    public function media()
    {
        return $this->hasMany(ProductMedia::class);
    }

    public function features()
    {
        return $this->belongsToMany(Feature::class, 'product_features');
    }

    public function scopeFeatured($query)
    {
        return $query->where('is_featured', true);
    }

    public function scopeMostViewed($query)
    {
        return $query->orderBy('views_count', 'desc');
    }

    public function scopeBestSeller($query)
    {
        return $query->orderBy('sales_count', 'desc');
    }

    public function scopeNewArrivals($query)
    {
        return $query->where('is_new', true);
    }

    public function orderItems()
    {
        return $this->morphMany(OrderItem::class, 'orderable');
    }
}