You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade添加嵌套foreach循环后用户id值异常报错问题

问题根因

核心是循环变量重名导致外层用户变量被覆盖:

  • 外层遍历用户列表使用变量$item,对应每个用户模型实例
  • 内层遍历该用户的角色列表时,同样使用$item作为遍历变量,内层循环执行完成后,原有的用户$item会被最后一个角色的值覆盖;如果当前用户没有任何角色,内层循环不执行,$item会被置为null,后续调用$item->id时就会抛出读取null属性的错误,也可能出现拿到角色ID、旧残留ID的情况,导致跳转到已删除的记录。
    你删除嵌套循环后功能恢复,就是因为不再触发变量覆盖的逻辑。
解决方案

将内层循环的遍历变量改为不重名的名称,比如$role即可,修改后代码如下:

@forelse($users as $item)
    <tr>
        <td>{{ $loop->iteration }}</td>
        <td>{{ $item->name }}</td>
        <td>{{ $item->email }}</td>
        <td>
            @if($item->email_verified_at)
                {{ "verified" }}
            @else
                {{ "not verified" }}
            @endif
        </td>
        <td>    
            @foreach($item->roles as $role)
                {{ $role['name'] }} 
            @endforeach
        </td>
        <td>
            <a href="{{ route('user.edit', $item->id) }}">Edit</a>
            <form action="{{ route('user.destroy', $item->id) }}" method="POST">
                @csrf
                @method('delete')
                <button onclick="return confirm('Are you sure ??')" type="submit">Delete</button>
            </form>
        </td>
    </tr>
    @empty
    <tr>
        blank data
    </tr>
@endforelse
可选优化

如果要兼容无角色的用户,避免角色列空值,可以在内层循环加空判断:

<td>    
    @foreach($item->roles as $role)
        {{ $role['name'] }} 
    @empty
        无角色
    @endforeach
</td>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:00