File: /var/www/html/sarvodayahospital/app/Models/Testimonial.php
<?php
namespace App\Models;
use App\Scopes\isPublishedScope;
use Illuminate\Database\Eloquent\Model;
class Testimonial extends Model
{
protected $with = ['media', 'specialities', 'treatments', 'seoComponent'];
protected $appends = ['youtube_url'];
protected static function booted()
{
return static::addGlobalScope(new isPublishedScope());
}
public function getYoutubeURLAttribute()
{
if (!is_null($this->YoutubeVideoCode) && $this->YoutubeVideoCode != '') {
$link = $this->YoutubeVideoCode;
$video_id = explode('?v=', $link);
if (empty($video_id[1])) {
$video_id = explode('?vi=', $link);
}
if (empty($video_id[1])) {
$video_id = explode('/v/', $link);
}
if (empty($video_id[1])) {
$video_id = explode('/vi/', $link);
}
if (empty($video_id[1])) {
$video_id = explode('/embed/', $link);
}
if (empty($video_id[1])) {
$video_id = explode('/shorts/', $link);
}
if (empty($video_id[1])) {
$video_id = explode('youtu.be/', $link);
}
if (empty($video_id[1])) {
if (strpos($link, '/') !== false) {
$video_id = end(explode('/', $link));
$video_id = explode('?', $video_id); // Deleting any other params
if (is_array($video_id)) {
$video_id = $video_id[0];
}
return $video_id;
}
}
if (is_array($video_id)) {
$video_id = explode('?', $video_id[1]); // Deleting any other params
if (is_array($video_id)) {
$video_id = $video_id[0];
}
$video_id = explode('&', $video_id); // Deleting any other params
if (is_array($video_id)) {
$video_id = $video_id[0];
}
}
return $video_id;
}
}
public function specialities()
{
return $this->belongsToMany(
Speciality::class,
'testimonials__specialities',
'testimonial_id',
'speciality_id'
)->select('specialities.id', 'SpecialityName', 'Slug');
}
public function hospital()
{
return $this->belongsTo(Hospital::class, 'Hospital');
}
public function treatments()
{
return $this->belongsToMany(
Treatment::class,
'testimonials__treatments',
'testimonial_id',
'treatment_id'
)->select('TreatmentName', 'Slug');
}
public function doctors()
{
return $this->belongsToMany(
Doctor::class,
'testimonials__doctors',
'testimonial_id',
'doctor_id'
)
->select('doctors.id', 'doctors.DoctorName', 'doctors.Slug', 'doctors.Gender')
->orderBy('Weight', 'ASC');
}
public function media()
{
return $this->hasOneThrough(
Media::class,
MediaMorph::class,
'related_id',
'id',
'id',
'upload_file_id'
)
->where('related_type', 'testimonials')
->where('field', 'Image')
->orderBy('order')
->select('upload_file.id', 'name', 'url', 'formats');
}
public function seoComponent()
{
return $this->hasOneThrough(
SEOComponent::class,
TestimonialComponent::class,
'testimonial_id',
'id',
'id',
'component_id'
)
->where('field', 'SEO')
->where('component_type', 'components_seo_seos');
}
}