Laravel中从Controller向Blade传递数据并渲染的问题
解决Blade视图渲染数组内对象数据的问题
嘿,我一眼就瞅出问题所在啦!你的$dataSample是一个包含单个对象的数组,而非直接的对象实例,这就是你没法直接渲染那三个值的核心原因。
先看你dump出来的结果:
array:1 [▼ 0 => {#798 ▼ +"current": "2840" +"prior": "2257" +"full": "2700" } ]
这说明$dataSample本身是数组结构,索引为0的元素才是存储着current/prior/full的目标对象。下面给你两种靠谱的解决办法:
方案1:在Blade视图中直接处理
方式A:直接访问数组索引(确定数组非空时用)
既然数组里只有这一个对象,你可以直接取索引0的元素再访问属性:
<div class="uk-float-right uk-margin-small-right"> <span class="uk-text-bold">Current: {{ $dataSample[0]->current }}</span> <span class="uk-text-muted">Prior: {{ $dataSample[0]->prior }}</span> <span class="uk-text-primary">Full: {{ $dataSample[0]->full }}</span> </div>
方式B:用@foreach循环(更安全,兼容数组为空的情况)
如果担心后续数组可能有多个元素,或者想避免数组为空时报错,用循环更稳妥:
<div class="uk-float-right uk-margin-small-right"> @foreach($dataSample as $data) <span class="uk-text-bold">Current: {{ $data->current }}</span> <span class="uk-text-muted">Prior: {{ $data->prior }}</span> <span class="uk-text-primary">Full: {{ $data->full }}</span> @endforeach </div>
方案2:在控制器中提前处理数据
如果你想让视图代码更简洁,可以在控制器里把数组转成单个对象:
// 如果你是用Eloquent查询,把get()改成first()就能直接拿到单个对象 $dataSample = YourModel::where('your_condition')->first(); // 如果已经是数组了,也可以直接取第一个元素(加?? null防止数组为空报错) $dataSample = $dataSample[0] ?? null;
处理完之后,视图里就可以直接用{{ $dataSample->current }}这类写法啦。
小提示:避免报错的小技巧
如果怕出现“属性不存在”或者“数组索引不存在”的错误,可以用PHP的可选链操作符?->,比如:
{{ $dataSample[0]?->current }}
这样即使数组为空或者对象不存在,页面也不会崩,只会显示空值。
内容的提问来源于stack exchange,提问作者Geoff_S
相关产品推荐
相关产品推荐

