HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;
    }
}