Есть ли способ вернуть родительскую модель с отношением, но вернуть только некоторые строки отношений, используя where in?
Это может быть довольно запутанным, позвольте мне объяснить.
На данный момент у меня есть 2 модели, Здания и комнаты, 1 здание может иметь много комнат.
Я хочу иметь возможность передавать массив идентификаторов комнат и возвращать сайты и только те комнаты, которые находятся в массиве.
Вот что у меня есть на данный момент
if($request->input('ids') && !is_null($request->input('ids'))){
$ids = explode(',',$request->input('ids'));
//Exploded ids looks like this "2,4,11,55,56"
$buildings = Buildings::join('rooms')->whereIn('rooms.id',$ids)->get();
} else {
$buildings = Buildings::whereHas('rooms')->get();
}
На данный момент это вернет все здания, в которых есть комната, идентификатор которой находится в массиве ids
, и все ее комнаты, что в конечном итоге вернет здание с более чем 200 комнатами. Мне нужно, чтобы он возвращал здание и ТОЛЬКО комнаты, у которых есть идентификатор в этом массиве.
Это возможно?
Я знаю, что могу сделать это обратным способом и получить все комнаты в качестве родителя, а затем получить здания, но мне нужно, чтобы здания были родителем, так как я запускаю такой foreach с результатами
foreach($buildings as $key => $building){
<h1>{{$building->name}}</h1>
foreach($building->rooms as $k => $room){
<p>{{$room->name}}</p>
}
}
Если это все еще сбивает с толку, в реальном мире я создаю PDF-файл комнат. Комнаты можно выбрать, установив флажок рядом с комнатой в списке комнат. Затем мне нужно передать массив идентификаторов комнат и получить все здания, в которых есть одна из комнат. Затем получите все комнаты для каждого здания, где идентификатор комнаты находится в массиве.