Laravel控制器如何构造查询获取父模型及专属关联子模型用于嵌套循环
实现方案
第一步:调整控制器查询逻辑
你已经定义好了模型关联,直接使用Laravel的关联预加载即可,不需要单独查询全部书桌,修改后控制器代码如下:
class RoomController extends Controller { public function index() { // 预加载每个房间关联的书桌数据,避免N+1查询问题 return view('index', [ 'rooms' => Room::with('desks')->get() ]); } }
第二步:修改视图层的嵌套循环
把原来遍历全局$desks的逻辑,改成遍历当前房间关联的书桌集合即可:
<div class="grid grid-cols-1 gap-3 "> @foreach ($rooms as $room) <div class="bg-white text-center h-auto"> {{ $room->name }} <div class="m-3"> <div class="lg:grid lg:grid-cols-6 gap-3"> @foreach ($room->desks as $desk) <div class="bg-red-200 text-center h-10"> Desk {{ $desk->id }} </div> @endforeach </div> </div> </div> @endforeach </div>
补充说明
with('desks')会执行两次查询:一次查全部房间、一次查这些房间对应的所有书桌,自动匹配关联关系,性能远高于循环内单独查询- 模型定义的
hasMany关联会自动挂载desks动态属性,直接通过$room->desks就能拿到当前房间对应的所有书桌
内容的提问来源于stack exchange,提问作者robhill369
相关产品推荐
相关产品推荐

