Charles Michel
Charles Michel

Reputation: 304

In Laravel 5.3 Eloquent how to retrieve 3rd table data with where condition

I have 3 Models(each associated with a table separately) which associated with each other I have attached the table structure below enter image description here

Models are,
Doctor Model associated with doctor_profile_master

<?php

namespace App\TblModels;

use Illuminate\Database\Eloquent\Model;

class Doctor extends Model
{
/**
 * @var string
 */
protected $table = 'DOCTOR_PROFILE_MASTER';

/**
 * @var string
 */
protected $primaryKey = 'doctor_profile_master_id';

/**
 * @var array
 */
protected $fillable = ['doctor_id', 'user_master_id', 'doctor_first_name', 'doctor_last_name', 'doctor_isactive'];


/**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function hospitalDoctorAssociateMasters(){

    return $this->hasMany('App\TblModels\HospitalDoctorAssociateMaster','doctor_profile_master_id');
}

}

HospitalDoctorAssociateMaster Model associated with hospital_doctor_associate_master

<?php

namespace App\TblModels;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;

class HospitalDoctorAssociateMaster extends Model
{
/**
 * @var string
 */
protected $table = 'HOSPITAL_DOCTOR_ASSOCIATE_MASTER';

/**
 * @var string
 */
protected $primaryKey = 'hospital_doctor_associate_master_id';

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function doctor(){

    return $this->belongsTo('App\TblModels\Doctor','doctor_profile_master_id');
}

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function hospital(){

    return $this->belongsTo('App\TblModels\Hospital','hospital_profile_master_id');
}
}

HospitalDoctorRecurringSchedule Model associated with hospital_doctor_recurring_schedule

<?php

namespace App\TblModels;

use Illuminate\Database\Eloquent\Model;

class HospitalDoctorRecurringSchedule extends Model
{
/**
 * @var string
 */
protected $table = 'HOSPITAL_DOCTOR_RECURRING_SCH_MASTER';

/**
 * @var string
 */
protected $primaryKey = 'hospital_doctor_recurring_sch_master_id';



public function hospitalDoctorAssociateMaster(){

    return $this->belongsTo('App\TblModels\HospitalDoctorAssociateMaster','hospital_doctor_associate_master_id');
}

}

Thing i want to do is,
How to retrieve the hospital_doctor_recurring_sch_master table data using specific doctor_id(doctor_profile_master)

I tried some methods but cant able to retrieve those values.

Thanks in advance.

Upvotes: 2

Views: 778

Answers (1)

Sujit Baniya
Sujit Baniya

Reputation: 915

You could use something like this:

$hospitalDoctors = HospitalDoctorRecurringSchedule::with(['hospitalDoctorAssociateMaster', 'hospitalDoctorAssociateMaster.doctor', 'hospitalDoctorAssociateMaster.hospital'])->all();

To search by fields in related tables:

$hospitalDoctors = HospitalDoctorRecurringSchedule::with([
                      'hospitalDoctorAssociateMaster', 
                      'hospitalDoctorAssociateMaster.doctor', 
                      'hospitalDoctorAssociateMaster.hospital'])
                      ->whereHas('hospitalDoctorAssociateMaster.doctor', function ($query) use ($doctorId) {
    $query->where('doctor_id', '=', $doctorId);
 })
->all();

For hospitalDoctorAssociateMaster.hospital:

Define Hospital Model and try

Upvotes: 2

Related Questions