Laravel 5 Laravel isset在嵌套关系上总是返回false
考虑以下场景: 我有一个名为Order的雄辩模型,它有一个行项目和一个行项目总计,定义如下(为问题简化): 当我执行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
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);