如何获取数组中DETALLES与AREAS下的数据?Laravel开发问题
解决Laravel中无法访问关联模型数据的问题
你控制器里的逻辑有明显问题,导致没法正确获取detalles和areas的关联数据,咱们一步步来修复:
首先修正控制器代码
你原来的foreach循环里,每次调用$d::with('detalles')->with('areas')->get()其实是在重新查询整个Hospitales模型的所有数据,根本不是当前医院的关联关系,而且最后$return只会保留循环最后一次的结果,完全偏离了你的需求。
正确的做法是一次性预加载所有关联数据,还能避免N+1查询的性能问题,代码改成这样:
public function findHospitalSearch(Request $request){ // 预加载detalles和areas关联,同时筛选estado条件 $hospitales = Hospitales::where('estado', $request->estado) ->with(['detalles', 'areas']) ->get(); return view('sistema.findHospitalResult', compact('hospitales')); }
然后在视图中访问关联数据
现在你可以在视图里正常遍历医院,同时访问它的detalles和areas数据了,注意根据你的关联类型(一对一/一对多)调整写法:
情况1:一对一关联(比如一个医院对应一条detalle记录)
@foreach($hospitales as $hospital) <h2>{{ $hospital->name }}</h2> <!-- 直接访问detalles的字段 --> <p>Dirección: {{ $hospital->detalles->direccion }}</p> <p>Teléfono: {{ $hospital->detalles->telefono }}</p> @endforeach
情况2:一对多关联(比如一个医院对应多个area记录)
@foreach($hospitales as $hospital) <h2>{{ $hospital->name }}</h2> <!-- 遍历所有areas --> <h3>Áreas disponibles:</h3> <ul> @foreach($hospital->areas as $area) <li>{{ $area->nombre }}</li> @endforeach </ul> @endforeach
关键提醒
- 确保你的
Hospitales模型里已经正确定义了detalles和areas的关联方法,比如:// 一对一关联示例 public function detalles() { return $this->hasOne(DetallesHospital::class); } // 一对多关联示例 public function areas() { return $this->hasMany(AreaHospital::class); } - 如果关联是反向的(比如
DetallesHospital属于Hospitales),要确保关联方法的外键设置正确。
内容的提问来源于stack exchange,提问作者Juan Santos
相关产品推荐
相关产品推荐

