You need to enable JavaScript to run this app. Laravel控制器无法传递数据库查询变量$data_news到Blade页面如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Laravel控制器无法传递数据库查询变量$data_news到Blade页面如何解决?

问题修复方案

你遇到的报错是三个配置错误共同导致的,按以下步骤修复即可:

  • 修正控制器传递变量的键名
    当前控制器中return view('Pages.home')->with('Pages', $data_news); 代码是把查询结果赋值给了名为Pages的变量传入视图,和视图中使用的$data_news变量名不匹配,变量自然不存在。
    把返回视图的代码修改为:
    // 方案1:修改with的第一个参数为视图用到的变量名
    return view('Pages.home')->with('data_news', $data_news);
    // 方案2:用compact方法更简洁传递变量
    return view('Pages.home', compact('data_news'));
    
  • 修正路由配置
    当前用的Route::resource是Laravel的资源路由,仅默认映射index、create、store等7个预设方法,不会匹配你自定义的home方法,请求不会触发你写的变量赋值逻辑。可选两种修改方案:
    // 方案1:废弃资源路由,单独绑定路由和控制器方法
    Route::get('Pages/home', [\App\Http\Controllers\NewsController::class, 'home']);
    // 方案2:把控制器中的home方法改名为index,保持原有资源路由配置不变,资源路由的GET请求会自动映射到index方法
    
  • 修正数据访问格式(避免后续出现二次报错)
    控制器查询后调用了->toArray()把结果转为了数组,视图中用$news->title的对象属性方式访问会报错,可选两种修改方案:
    1. 删除控制器代码中的->toArray(),保持查询结果为集合对象,视图原有写法不用调整
    2. 把视图中所有$news->xxx的写法改为数组访问格式:$news['title']、$news['text']

可选优化(避免无数据时视图报错)

可以把视图的循环逻辑改为@forelse指令,兼容无数据的场景:

@forelse ($data_news as $news)
<div class="col-md-4 col-xl-52"><img src="strony/assets/img/newspaper-solid.svg" style="width: 100px;">
    <p style="text-align: center;">{{ $news->title }}</p>
    <p style="text-align: left;"><br>{{ $news->text }}</p>
</div>
@empty
<p>暂无新闻数据</p>
@endforelse

内容的提问来源于stack exchange,提问作者patryk6654

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 12:09:04