Laravel控制器传递多模型数据报错:undefined variable: sec_3
问题原因与解决方法
核心问题
Laravel的view()方法仅接受单个关联数组作为数据传递参数,你分开传递三个数组的写法是错误的。只有第一个数组$context里的变量bbs能被视图识别,后续的$context_2、$context_3不会被解析到视图中,这就是sec_3变量未定义的原因。
修复Controller代码
将三个数组合并为一个后再传给view()方法,以下是两种常用写法:
写法一:直接构造完整数据数组
class PreschoolInstitution3Controller extends Controller { public function index(){ $data = [ 'bbs' => PreschoolInstitution3::latest()->get(), 's' => PreschoolInstitution::latest()->get(), 'sec_3' => TrainingPrograms::latest()->get() ]; return view('our_employees', $data); } }
写法二:用compact()简化(可读性更强)
先单独定义变量,再用compact()打包成数组:
class PreschoolInstitution3Controller extends Controller { public function index(){ $bbs = PreschoolInstitution3::latest()->get(); $s = PreschoolInstitution::latest()->get(); $sec_3 = TrainingPrograms::latest()->get(); return view('our_employees', compact('bbs', 's', 'sec_3')); } }
额外优化(可选)
你的blade模板存在HTML标签未闭合的问题(比如<td>{{$section_2->number}}<td>),虽不影响变量报错,但会导致页面结构异常,建议修正为:
@foreach ($s as $section_2) <tr> <td>{{$section_2->number}}</td> <td>{{$section_2->fullname }}</td> <td>{{$section_2->post }}</td> <td>{{$section_2->telephone }}</td> <td>{{$section_2->email }}</td> </tr> @endforeach @foreach ($bbs as $section ) <tr> <td>{{$section->number}}</td> <td>{{$section->full_name}}</td> <td>{{$section->post}}</td> <td>{{$section->education}}</td> <td>{{$section->category}}</td> <td>{{$section->teaching_experience}}</td> <td>{{$section->professional_development}}</td> </tr> @endforeach @foreach ($sec_3 as $section_3) <tr> <td>{{ $section_3->number }}</td> <td>{{ $section_3->level }}</td> <td>{{ $section_3->directions }}</td> <td>{{ $section_3->type_of_educational_program }}</td> <td>{{ $section_3->period_of_assimilation }}</td> <td>{{ $section_3->number_of_students }}</td> </tr> @endforeach
内容的提问来源于stack exchange,提问作者Kotomon
相关产品推荐
相关产品推荐

