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

Laravel日志可输出值,但页面报「Attempt to read property on null」错误

问题:Eloquent关联查询日志正常输出但页面报错

我尝试在Laravel模型间进行Eloquent关联查询时,页面报错,但日志中能正常输出sectorId的值,这些ID在sectors表中都存在。

控制器代码

$processedMaterialOrders = ProcessedMaterialOrder::get();

$sessionVariables = Session::all();

// Log::channel('ecom')->info($processedMaterialOrders);

$filteredProcessedMaterials = [];
foreach ($processedMaterialOrders as $key => $processedMaterialOrder) {
    // Log::channel('ecom')->info($processedMaterialOrder);

    $sectorId = $processedMaterialOrder->process->sector->id;
    Log::channel('ecom')->info($sectorId);

模型关联

ProcessedMaterial模型

public function process(): BelongsTo
{
    return $this->belongsTo(Process::class, 'process_id');
}

Process模型

public function sector(): BelongsTo
{
    return $this->belongsTo(Sector::class);
}

日志输出

[2023-11-11 16:49:39] local.INFO: 5  
[2023-11-11 16:49:39] local.INFO: 2  
[2023-11-11 16:49:39] local.INFO: 1  
[2023-11-11 16:49:39] local.INFO: 1  
[2023-11-11 16:49:39] local.INFO: 2  
[2023-11-11 16:49:39] local.INFO: 5  
[2023-11-11 16:49:39] local.INFO: 5  
[2023-11-11 16:49:39] local.INFO: 2  
[2023-11-11 16:49:39] local.INFO: 1  

问题分析

日志能输出部分sectorId,说明大部分数据的关联是正常的,但页面报错的核心原因是存在某条ProcessedMaterialOrder数据的关联链断裂:

  • 可能某条ProcessedMaterialOrder的process_id无效,导致$processedMaterialOrder->process为null;
  • 或者某条Process数据没有关联的sector,导致$process->sector为null。
    循环执行到这条异常数据时,尝试访问null的属性就会抛出错误,而日志只输出了报错前的有效数据。

解决方法

1. 提前过滤无效数据

查询时直接排除关联不完整的记录,从根源避免后续循环出错:

$processedMaterialOrders = ProcessedMaterialOrder::with('process.sector')
    ->has('process')
    ->has('process.sector')
    ->get();

2. 用可选调用规避空指针

在访问关联属性时使用?->(Laravel 8+支持),即使关联为空也不会触发报错:

$sectorId = $processedMaterialOrder->process?->sector?->id;
if ($sectorId) {
    Log::channel('ecom')->info($sectorId);
    // 后续业务逻辑
}

3. 检查数据完整性

排查数据库中关联字段的有效性:

  • 检查processed_material_orders表中是否有process_id不存在于processes表的记录;
  • 检查processes表中是否有sector_id不存在于sectors表的记录。

内容的提问来源于stack exchange,提问作者Igor do pálido ponto azul.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:25:03