Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Deekshith's avatar

Laravel relationship to fetch data

I have three tables like below,

centers

id, centername

sub_centers

id, center_id, subcentername,address

sub_center_rooms

id,sub_center_id,room_name,capacity

sub_center_room_time_slots

id,sub_center_id,sub_center_room_id, start_time, end_time

In Center.php

public function subcenters()
  {
    return $this->hasMany('App\SubCenter','center_id','id');
  }

In SubCenter.php

public function subcenterrooms()
  {
    return $this->hasMany('App\SubCenterRoom,'sub_center_id','id');
  }

I want to fetch all linked data in one query how to do that? i tried code like below,

$centers = Centers::whereHas('subcenters')->with(['subcenters'])->where('active',1)->get();

Can i use belongsToMany in SubCenter.php modal?

so i should get data in below format,

id:
centername:
subcenters: [{
	id:
	subcentername: 
	subcenterrooms: [{
		id:
		roomname:
		subcenterroomslots: [{
			id:
			starttime:
			endtime:
		}]
	}]
}];

Any help?

0 likes
4 replies
Sinnbeck's avatar

You can use dot notation to go deep

$centers = Centers::whereHas('subcenters')->with(['subcenters.subcenterrooms.subcenterroomslots'])->where('active',1)->get(); 
Deekshith's avatar

@Sinnbeck Thank you. i want to filter out empty result of subcenterrooms/subcenterroomslots . how to use dot in whereHas?

Sinnbeck's avatar
Sinnbeck
Best Answer
Level 102

@deekshith same

$centers = Centers::whereHas('subcenters.subcenterrooms.subcenterroomslots')->with(['subcenters.subcenterrooms.subcenterroomslots'])->where('active',1)->get();  

Please or to participate in this conversation.