Laravel 5 Laravel isset在嵌套关系上总是返回false

Laravel 5 Laravel isset在嵌套关系上总是返回false,laravel-5,eloquent,isset,Laravel 5,Eloquent,Isset,考虑以下场景: 我有一个名为Order的雄辩模型,它有一个行项目和一个行项目总计,定义如下(为问题简化): 当我执行dd($order->lineitem->totals)时,我正确地收到了数据: Collection {#530 ▼ #items: array:7 [▼ 0 => LineItemTotal {#506 ▶} 1 => LineItemTotal {#531 ▶} 2 => LineItemTotal {#522 ▶} 3

考虑以下场景: 我有一个名为Order的雄辩模型,它有一个行项目和一个行项目总计,定义如下(为问题简化):

当我执行
dd($order->lineitem->totals)
时,我正确地收到了数据:

Collection {#530 ▼
  #items: array:7 [▼
    0 => LineItemTotal {#506 ▶}
    1 => LineItemTotal {#531 ▶}
    2 => LineItemTotal {#522 ▶}
    3 => LineItemTotal {#508 ▶}
    4 => LineItemTotal {#509 ▶}
    5 => LineItemTotal {#510 ▶}
    6 => LineItemTotal {#511 ▶}
  ]
}
但是,当我执行以下操作时:

dd(isset($order->lineitem->totals));
我收到:

false
这真的让我头疼,到目前为止,我猜测在这个过程中的某个地方有一个受保护的属性,它阻止
isset()
empty()
访问它,从而返回
false
(尽管这两个方法都定义为public)

你知道为什么会发生这种情况以及如何解决吗?我的一个想法是用一个神奇的方法覆盖
isset()
,但我希望有一个更干净的解决方案。

当isset()返回false时,在“lineitem”或“totals”(关系)中查找时可能会出错,因为查找值为空

解决方案是将它们分开,并放置try-catch异常

// part 1
try {
  $lineitem = $order->lineitem;
} catch (Exception $e) {
  $lineitem = [];
}

// part 2
try {
  $totals = $lineitem->totals;
} catch (Exception $e) {
  $totals = [];
}

dd($totals);
使用count()>0。然后使用foreach,然后isset@Bugfixer,我相信count()会在完全没有行项目的情况下触发错误(这是可能的)
// part 1
try {
  $lineitem = $order->lineitem;
} catch (Exception $e) {
  $lineitem = [];
}

// part 2
try {
  $totals = $lineitem->totals;
} catch (Exception $e) {
  $totals = [];
}

dd($totals);