问题描述
我从数据库中检索了一个 laravel 集合,我想根据三个计算更新该数据库中的某些值。但在我进行计算之前,我首先检查所有相关的集合项是否不为空。我可以检查它们是否为空,但由于某种原因无法检索具有控制器功能范围的错误变量来告诉用户尚未设置变量。
$error_arr = [];
$calculation = FertilApp::calculation($product,$farm,$agent);
$calculation->each(function ($item,$key) {
if ($item->ha === null) {
$error_arr[] = 'Prices has been updated';
$error_arr[] = 'But no calculation has been done,please update following block:' . $item->block;
return false;
}
});
变量 $error_arr
返回一个空数组,即使我知道 ha
键是 null
。
另一种方法是使用普通的 foreach()
循环。我已经试过了,它有效,但我真的很想知道为什么这不起作用。
有人可以帮助我解释为什么这个集合 each()
方法拒绝我的变量访问集合方法之外的值吗?
编辑:如果我尝试将变量作为参数传递,则会收到以下错误消息 Cannot use a scalar value as an array
。
Laravel 版本:5.6.39
解决方法
尝试使用 Hi Jack
语句:
global
$calculation->each(function ($item,$key) {
global $error_arr;
在您的代码中为空,因为它不存在于您的 $error_arr
方法的回调 function
范围内。与其他语言(如 JavaScript)不同,函数外部的变量默认无法在函数内部访问。有关详细信息,请参阅 PHP's documentation on variable scope。