Laravel Blade模板循环中无法访问对象属性值问题求助
问题原因
- 你的循环嵌套多了一层,导致遍历出来的
$event根本不是事件对象,而是对象属性的值 - 具体来看你的数据结构:每个
$user_id对应的$user_events_array本身就是直接存储事件对象的数组,比如示例中user_id=1对应的结构是[0 => 事件对象],你不需要再嵌套一层循环去遍历它的子元素 - 当你执行
@foreach($user_events_array as $events)时,$events已经是你要的事件对象了,再写一层@foreach($events as $event)时,PHP会默认遍历对象的所有公开属性,此时拿到的$event是id、status等属性的具体值(数字、字符串等标量类型),自然无法作为对象访问id属性 - 直接输出
{{ $event }}不会报错的原因是Laravel会自动把任意标量类型转为字符串输出,不会触发类型错误
修复方案
修改Blade中的循环逻辑,去掉多余的嵌套层即可:
@foreach($overview_pivot as $datetime => $users) <tr> <td>{{ $datetime }}</td> @foreach($users as $user_id => $user_events_array) <td> <ul class="list-group list-group-flush" data-toggle="checklist"> @foreach($user_events_array as $event) {{ $event->id }} @endforeach </ul> </td> @endforeach </tr> @endforeach
- 如果担心存在异常数据,可以使用Laravel提供的
optional辅助函数避免报错:{{ optional($event)->id }} - 也可以在遍历前增加类型判断,确认
$event是对象再访问属性:@if(is_object($event)) {{ $event->id }} @endif
内容的提问来源于stack exchange,提问作者Lukas Komar
相关产品推荐
相关产品推荐

