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

Laravel 9报错Trying to access array offset on value of type bool求助

错误排查与解决办法

错误原因

  1. 查询逻辑错误导致返回布尔值:messages::find($x)是根据模型主键查询单条记录,若找不到匹配的主键会返回bool(false);而需求是获取当前用户的所有消息,应该用条件查询返回集合。当视图遍历布尔值false时,每次迭代的变量为布尔类型,访问$mssg["objMessage"]就会触发Trying to access array offset on value of type bool错误。
  2. 循环变量名冲突:视图中@foreach ($mssg as $mssg)将循环变量与集合变量重名,会覆盖原集合对象,导致循环逻辑混乱。
  3. 调试代码阻断执行流程:控制器中的dd($m["idUser"])会直接终止程序,永远无法执行到返回视图的代码。
  4. 视图传参格式错误:返回视图时传入两个独立数组,Laravel仅接收第一个数组作为视图数据,第二个数组的idd变量无法传递到视图。

修复后的代码

控制器代码

function indexe() { 
    $userId = Auth::User()->id;
    $userName = Auth::User()->name;
    // 按用户ID查询所有消息,返回集合(无数据时返回空集合而非false)
    $mssg = messages::where('idUser', $userId)->get();

    // 移除阻断流程的调试代码
    // foreach($mssg as $m) {
    //     dd($m["idUser"]); 
    // }

    // 用单个关联数组传递视图数据
    return view('liate_message', [
        "mssg" => $mssg,
        "idd" => $userName
    ]);
}

视图代码

@foreach ($mssg as $message) <!-- 重命名循环变量,避免覆盖原集合 -->
      <tr>
    <td>{{ $message["objMessage"] }}</td>
    <td>{{ $message["estDateMessage"] }}</td>
    <td>
        @if($message["active"] == 0)
         消息未读
        @else
         消息已读
        @endif
    </td>
    <td><button><a href="/mssg">查看</a></button></td>
    <td><button>删除</button></td>
  </tr>
@endforeach

额外说明

  • 确保messages模型对应的数据库表中存在idUser字段,用于关联用户ID。
  • where()->get()会返回Eloquent集合(即使无匹配数据也是空集合),不会返回布尔值,彻底避免了数组偏移访问错误。
  • 循环变量与集合变量分开命名,避免变量覆盖导致的逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:45:32