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

Laravel获取非对象属性报错问题求助

解决 "Trying to get property 'nameP' of non-object" 报错

嘿,我一眼就揪出问题所在了——你碰到的这个错误,本质就是你通过DB查询得到的$sub变量是null,空值当然没法访问nameP属性啦!

为什么会出现这个问题?

你看你的代码逻辑:你先拿Hour::latest()->first()->id + 1生成了一个$id,接着就用这个还没被创建的Hour ID去关联查询projects表的nameP,但这时候你还没执行Hour::create()啊!实际请求时,这个ID对应的Hour记录根本还没写入数据库,所以你的查询自然拿不到数据,$sub就成了null。

至于Laravel Tinker里能正常跑,那是因为你之前可能手动创建过对应ID的Hour记录,刚好匹配上了查询条件,属于巧合而已。


修复方案(两种可选,推荐第一种)

方案一:用Eloquent关联(最符合Laravel风格)

先给你的Hour模型加个和Project的关联关系:

// app/Models/Hour.php
public function project()
{
    return $this->belongsTo(Project::class);
}

然后修改你的store方法,逻辑更简洁安全:

public function store(Request $request)
{
    // 先把Hour记录写入数据库
    $hour = Hour::create([
        'id' => $request->hour_id,
        'project_id' => $request->project_id,
        'day' => $request->day,
        'nHours' => $request->nHours,
        'notesH' => $request->notesH
    ]);
    
    // 通过关联直接拿项目名称,不用写复杂的DB查询
    $name = $hour->project->nameP;

    return response()->json([$hour, 'nameP' => $name]);
}

方案二:调整执行顺序(不用关联的话)

如果你暂时不想加模型关联,那就把创建记录的步骤放到查询前面,并且用刚创建的Hour的真实ID去查询:

public function store(Request $request)
{
    // 先创建Hour记录
    $hour = Hour::create([
        'id' => $request->hour_id,
        'project_id' => $request->project_id,
        'day' => $request->day,
        'nHours' => $request->nHours,
        'notesH' => $request->notesH
    ]);
    
    // 用刚生成的hour id去做关联查询
    $sub = DB::table('hours')
        ->join('projects', 'hours.project_id', '=', 'projects.id')
        ->where('hours.id', '=', $hour->id)
        ->select('nameP')
        ->first();
    
    // 加个空安全处理,避免再次出现类似报错
    $name = $sub?->nameP ?? '未找到项目名称';

    return response()->json([$hour, 'nameP' => $name]);
}

额外小建议

  • 尽量别手动指定id,Laravel默认的自增ID会自动处理,手动指定很容易出现ID冲突的问题;
  • 以后碰到类似的“非对象属性访问”错误,第一时间检查对应的变量是不是null,大概率是查询没返回数据导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:52:48