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

Laravel 8中Attempt to read property 'users_id' on null错误修复咨询

修复Laravel中"Attempt to read property 'users_id' on null"错误

错误原因

当前登录用户尚未创建关联的Data88记录,导致$user->detail_data为null,视图中直接访问$user->detail_data->users_id触发了空属性读取错误。

修复方案

方案1:视图中先判断关联是否存在

修改Blade视图代码,先检查关联数据是否存在,再执行后续逻辑:

<div class="form-group">
    <label for="exampleInputPassword1">Alamat</label>
    @if ($user->detail_data)
        <input type="text" class="form-control" id="alamat" name="alamat"
            value="{{ $user->detail_data->alamat }}">
    @else
        <input type="text" class="form-control" id="alamat" name="alamat"
            placeholder="Masukkan Alamat">
    @endif
</div>

说明:由于hasOne关联的匹配逻辑是users_id = user.id,只要关联存在,$user->id必然等于$user->detail_data->users_id,原判断条件完全多余,直接判断关联是否存在即可。

方案2:控制器提前拦截无关联数据的情况(可选)

如果业务要求用户必须先完善基础信息才能进入编辑页,可在控制器中提前检查并处理:

public function editData88(Request $request, $id)
{
    $id = Auth::user()->id;
    $user = User::where('id', $id)->with(['detail_data' => function ($query) {
        $query->with('agama');
    }])->first();
    
    // 无关联数据则跳转回原页面并提示
    if (!$user->detail_data) {
        return redirect()->back()->with('error', '请先完善个人基础信息');
    }
    
    $data_agama = Agama88::all();
    return view('crud.edit88', compact('user', 'data_agama', 'id'));
}

方案3:使用PHP可选链简化判断(PHP 8.0+)

若项目使用PHP 8.0及以上版本,可通过可选链操作符避免空错误:

<div class="form-group">
    <label for="exampleInputPassword1">Alamat</label>
    <input type="text" class="form-control" id="alamat" name="alamat"
        value="{{ $user->detail_data?->alamat ?? '' }}"
        placeholder="{{ $user->detail_data ? '' : 'Masukkan Alamat' }}">
</div>

说明:$user->detail_data?->alamat会在detail_data为null时返回null,再通过?? ''替换为空字符串,避免视图报错。

额外优化建议

  • 控制器中$id = Auth::user()->id;已覆盖路由参数$id,若该路由参数无实际用途,可删除以避免混淆。
  • 模型关联方法建议遵循Laravel驼峰命名规范,将detail_data改为detailData,对应视图中使用$user->detailData,更符合框架惯例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:50:26