File: /var/www/html/sarvodayahospital/app/Models/Speciality.php
<?php
namespace App\Models;
use App\Scopes\isActiveScope;
use App\Scopes\isPublishedScope;
use App\Scopes\OtherSpecialityScope;
use Illuminate\Database\Eloquent\Model;
use Staudenmeir\EloquentEagerLimit\HasEagerLimit;
class Speciality extends Model
{
use HasEagerLimit;
protected $with = ['media'];
protected $hidden = ['published_at', 'created_by', 'updated_by', 'created_at', 'updated_at'];
protected static function booted()
{
static::addGlobalScope(new isActiveScope());
static::addGlobalScope(new isPublishedScope());
static::addGlobalScope(new OtherSpecialityScope());
}
public function doctors()
{
return $this->belongsToMany(
Doctor::class,
'doctors__specialities',
'speciality_id',
'doctor_id'
)->orderBy('Weight', 'ASC');
}
public function hospitals()
{
return $this->belongsToMany(
Hospital::class,
'specialities__hospitals',
'speciality_id',
'hospital_id'
);
}
public function technologies()
{
return $this->belongsToMany(
Technology::class,
'specialities__technologies',
'speciality_id',
'technology_id'
);
}
public function procedures()
{
return $this->belongsToMany(
Procedure::class,
'specialities__procedures',
'speciality_id',
'procedure_id'
);
}
public function testimonials()
{
return $this->belongsToMany(
Testimonial::class,
'specialities__testimonials',
'speciality_id',
'testimonial_id'
);
}
public function treatments()
{
return $this->belongsToMany(
Treatment::class,
'specialities__treatments',
'speciality_id',
'treatment_id'
);
}
public function SubSpecialities()
{
return $this->belongsToMany(
Speciality::class,
'specialities__sub_specialities',
'speciality_id',
'related_speciality_id'
);
}
public function ss()
{
return $this->belongsToMany(
Speciality::class,
'specialities__sub_specialities',
'speciality_id',
'related_speciality_id'
)->select('Slug');
}
public function media()
{
return $this->hasOneThrough(
Media::class,
MediaMorph::class,
'related_id',
'id',
'id',
'upload_file_id'
)
->where('related_type', 'specialities')
->where('field', 'SpecialityIcon')
->orderBy('order')
->select('upload_file_morph.id', 'name', 'url', 'formats');
}
public function banner()
{
return $this->hasOneThrough(
Media::class,
MediaMorph::class,
'related_id',
'id',
'id',
'upload_file_id'
)
->where('related_type', 'specialities')
->where('field', 'Banner')
->orderBy('order')
->select('upload_file_morph.id', 'name', 'url', 'formats');
}
public function mobileBanner()
{
return $this->hasOneThrough(
Media::class,
MediaMorph::class,
'related_id',
'id',
'id',
'upload_file_id'
)
->where('related_type', 'specialities')
->where('field', 'MobileBanner')
->orderBy('order')
->select('upload_file_morph.id', 'name', 'url', 'formats');
}
public function blogs()
{
return $this->belongsToMany(
Speciality::class,
'blogs__specialities',
'speciality_id',
'blog_id'
)->select('SpecialityName', 'Slug');
}
public function seoComponent()
{
return $this->hasOneThrough(
SEOComponent::class,
SpecialityComponent::class,
'speciality_id',
'id',
'id',
'component_id'
)->where('field', 'SEO')
->where('component_type', 'components_seo_seos');
}
public function faqs()
{
return $this->hasManyThrough(
FAQ::class,
SpecialityComponent::class,
'speciality_id',
'id',
'id',
'component_id'
)->where('field', 'FAQ')
->where('component_type', 'components_faq_faqs')
->orderBy('order');
}
public function scopeOrderByWeightASC($query)
{
return $query->orderBy('Weight', 'ASC');
}
public function researchPublications()
{
return $this->hasMany(ResearchPublication::class, 'SpecialityID');
}
}