File: /var/www/html/sarvodayahospital/app/Http/Controllers/DoctorController.php
<?php
namespace App\Http\Controllers;
use App\Models\CMSPage;
use App\Models\Hospital;
use App\Models\Speciality;
use Illuminate\Http\Request;
use App\Models\Doctor;
use App\Models\HospitalAndDoctor;
class DoctorController extends Controller
{
public function index(Request $request)
{
$seo = [];
$searchQuery = $request->filled('query') ? $request->get('query') : '';
$hospitalQuery = $request->filled('hospital_name') ? $request->get('hospital_name') : '';
$specialityQuery = $request->filled('speciality') ? $request->get('speciality') : '';
$searchData = Doctor::query()
->when($searchQuery, function ($builder, $searchQuery) {
$builder->where('DoctorName', 'like', "%" .$searchQuery. "%")
->orWhere('Surname', 'like', "%" .$searchQuery. "%");
})
->when($hospitalQuery, function ($builder) use ($hospitalQuery) {
$builder->whereHas('hospitals', function ($query) use ($hospitalQuery) {
$query->where('Slug', $hospitalQuery);
});
})
->when($specialityQuery, function ($builder) use ($specialityQuery) {
$builder->whereHas('specialities', function ($query) use ($specialityQuery) {
$query->where('Slug', $specialityQuery);
});
})
->orderByRaw('ISNULL(Weight), Weight ASC')
->orderBy('Surname', 'asc')
->paginate(21);
$hospitals = Hospital::query()
->whereNotIn('Slug', ['sarvodaya-imaging-centre-with-nrch', 'sarvodaya-imaging-centre-with-ndmc'])
->select('id', 'Slug', 'HospitalShortName', 'Location')
->get();
if (request('hospital_name')) {
$selectedHospital = Hospital::where('Slug', request('hospital_name'))->first();
$specialities = $selectedHospital->specialities->pluck('Slug', 'SpecialityName');
} else {
$specialities = Speciality::query()
->orderByWeightASC()
->pluck('Slug', 'SpecialityName');
}
$cmsPage = CMSPage::query()
->where('Slug', request()->path())
->firstOrFail();
if ($cmsPage) {
$seo = $cmsPage->seoComponent()->first();
}
return view('pages.doctor', compact('searchData', 'hospitals', 'specialities', 'seo'));
}
public function show($slug)
{
$seo = [];
$cpsDoctors = $this->getDoctorByLocation($slug);
if ($cpsDoctors) {
$seo = $cpsDoctors['hospital_doctors']->seoComponent()->first();
return view('pages.cps-location-doctor', compact('cpsDoctors', 'seo'));
} else {
$doctor = Doctor::query()
->with('patientTestimonials', 'seoComponent', 'mednetInformation.hospital')
->where('Slug', $slug)
->firstOrFail();
if ($doctor) {
$seo = $doctor->seoComponent()->first();
}
return view('pages.single-doctor', compact('doctor', 'seo'));
}
}
protected function getDoctorByLocation($slug) {
$cps = HospitalAndDoctor::with('hospitals', 'interlinkModules', 'faqs')->where('Slug', $slug)->first();
if(!is_null($cps)) {
if (count($cps->hospitals)) {
$hospitals_id = $cps->hospitals->pluck('id');
$doctors = Doctor::getDoctorByHospital($hospitals_id);
return [
'hospital_doctors' => $cps,
'doctors' => $doctors
];
}
return null;
}
return null;
}
}