跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何在 Laravel Blade 模板中正确显示数据库查询数据

本文详解 laravel 中控制器向 blade 视图传递数据的常见错误及修复方法,重点解决因变量名不匹配导致数据无法渲染的问题,并提供完整可运行的代码示例与最佳实践建议。 本文详解 laravel 中控制器向 blade 视图传递数据的常见错误及修复方法,重点解决因变量名不匹配导致数据无法渲染的问题,并提供完整可运行的代码示例与最佳实践建议。 在 Laravel 开发中,一个高频问题就是:数据库已成功填充数据(无论是通过 Seeder 还是 phpMyAdmin),控制器也正确执行了模型查询,但 Blade 模板却始终空白或仅显示表头——这往往并非数据库或路由问题,而是 视图变量绑定与引用不一致 所致。 以你的代码为例,控制器中使用:
$data = Vacature::all(); return view('list', ['vacatures' => $data]);
这意味着你将查询结果赋值给了视图变量 vacatures(注意拼写为 vacatures,复数形式),而 Blade 中却误用了未定义的 $data 变量进行判空:
@if(isset($data)) {{-- ❌ 错误:$data 在视图中并不存在 --}} @foreach($vacatures as $vacature) ... @endforeach @endif
由于 $data 从未被传入视图,isset($data) 恒为 false,整个 @foreach 循环被跳过,表格体为空——这就是“只显示表头”的根本原因。 ✅ 正确做法是: 确保 @if 判空与 @foreach 遍历使用完全相同的变量名 。修改 Blade 中的判断逻辑为:
@if($vacatures->isNotEmpty()) {{-- ✅ 推荐:用集合方法判空,更语义化且安全 --}} @foreach($vacatures as $vacature) @endforeach @else @endif
ID Bedrijven ID Body Created At Updated At Action
{{ $vacature->id }} {{ $vacature->bedrijven_id }} {{ $vacature->body }} {{ $vacature->created_at }} {{ $vacature->updated_at }}
Geen vacatures gevonden.
? 补充说明: 使用 $vacatures->isNotEmpty() 替代 isset($vacatures) 更加健壮——它既可处理 null,也能准确识别空集合(如 Collection::make([])); Blade 中应使用对象属性访问语法($vacature->id)而非数组语法($vacature['id']),因为 Eloquent 返回的是模型实例,非原生数组(除非显式调用 toArray()); 若需调试变量内容,可在 Blade 中临时添加 {{ dd($vacatures) }} 查看实际传入结构。 此外,请确认以下关键点无误: 路由指向正确控制器方法:Route::get('list', [Vacatures::class, 'show']); ✅ 控制器方法名与路由注册一致(当前为 show,非 viewLoad); 模型 Vacature 已正确定义,且数据库表名符合 Laravel 约定(如 vacatures)或已通过 $table 属性显式指定。 最后,推荐采用 Laravel 的 资源控制器 与 命名路由 提升可维护性:
// routes/web.php Route::resource('vacatures', VacaturesController::class)->only(['index']);
// app/Http/Controllers/VacaturesController.php public function index() { return view('vacatures.index', [ 'vacatures' => Vacature::latest()->get() ]); }
这样不仅结构清晰,也便于后续扩展分页、搜索等功能。记住: 变量名一致性是 Blade 渲染成功的前提,也是 Laravel 数据流中最易忽视却最关键的细节之一。

相关文章