belongsTo(Item::class); } public function getImageAttribute($image) { if (! empty($image)) { return url(Storage::url($image)); } return $image; } public function scopeSearch($query, $search) { $search = '%'.$search.'%'; $query = $query->where(function ($q) use ($search) { $q->orWhere('sequence', 'LIKE', $search) ->orWhere('model_type', 'LIKE', $search) ->orWhere('third_party_link', 'LIKE', $search) ->orWhere('model_id', 'LIKE', $search) ->orWhereHas('model', function ($q) use ($search) { $q->where('name', 'LIKE', $search); }); }); return $query; } public function scopeSort($query, $column, $order) { switch ($column) { case 'model_name': $query->when(request('model_type') === 'App\\Models\\Item', function ($q) use ($order) { $q->leftJoin('items', 'items.id', '=', 'sliders.model_id') ->orderBy('items.name', $order); }); $query->when(request('model_type') === 'App\\Models\\Category', function ($q) use ($order) { $q->leftJoin('categories', 'categories.id', '=', 'sliders.model_id') ->orderBy('categories.name', $order); }); break; case 'item_name': $query->leftJoin('items', 'items.id', '=', 'sliders.item_id') ->orderBy('items.name', $order); break; case 'country_name': $query->leftJoin('countries', 'countries.id', '=', 'sliders.country_id') ->orderBy('countries.name', $order); break; case 'state_name': $query->leftJoin('states', 'states.id', '=', 'sliders.state_id') ->orderBy('states.name', $order); break; case 'city_name': $query->leftJoin('cities', 'cities.id', '=', 'sliders.city_id') ->orderBy('cities.name', $order); break; default: $query->orderBy($column, $order); break; } return $query->select('sliders.*'); } public function categories() { return $this->hasOne(Category::class); } public function country() { return $this->belongsTo(Country::class, 'country_id'); } public function state() { return $this->belongsTo(State::class, 'state_id'); } public function city() { return $this->belongsTo(City::class, 'city_id'); } public function model(): MorphTo { return $this->morphTo(); } }