Laravel中数据库数据未传递到view.blade视图无法展示问题求助
问题修复方案
问题根因梳理
- 你没有在
ModulesController中定义对应获取子分类产品列表的方法,也没有将$modules变量传递到视图
- 你没有在
- 视图中的判断逻辑顺序错误,在未遍历
$modules的情况下直接调用$module["subcategory"],此时变量不存在,判断永远不成立
- 视图中的判断逻辑顺序错误,在未遍历
- 可能未执行存储软链接命令,即使数据正常也会出现图片无法加载的问题
修复步骤
1. 新增控制器方法
在ModulesController中新增屋顶产品列表的方法,直接在查询层过滤子分类为dak的产品,性能更高:
// ModulesController.php 新增方法 public function roofModules() { // 直接查询所有子分类为dak的产品,按上传时间倒序排列 $modules = \App\Models\Module::where('subcategory', 'dak')->latest()->get(); return view('modules.roof', compact('modules')); }
2. 新增对应路由
在routes/web.php中添加对应路由:
Route::get('/roof-modules', [\App\Http\Controllers\ModulesController::class, 'roofModules'])->name('modules.roof');
3. 修正视图逻辑
你可以直接使用控制器过滤好的$modules,不需要再在视图做判断,修改视图代码如下:
@section('content') <div class="container"> <div class="flex justify-center pt-8 sm:justify-start sm:pt-0"> <h1>所有屋顶分类产品</h1> @forelse ($modules as $module) <a href="/module/{{ $module->id }}"> <img src="/storage/{{$module->image}}" class="w-100" alt="{{ $module->title }}"/> </a> @empty <p>暂无屋顶分类的产品</p> @endforelse </div> </div> @endsection
这里用@forelse替代@foreach,空数据时会显示提示,便于排查问题
4. 执行存储软链接命令
如果之前没执行过该命令,需要在项目根目录运行:
php artisan storage:link
这样storage/app/public下的文件才能通过/storage/路径对外访问。
验证方法
先确认数据库中存在subcategory为dak的产品数据,访问/roof-modules路径即可看到对应产品。
内容的提问来源于stack exchange,提问作者Bots
相关产品推荐
相关产品推荐

