Laravel 集合从每个函数中检索变量结果

Posted

技术标签:

【中文标题】Laravel 集合从每个函数中检索变量结果【英文标题】:Laravel collection retrieve variable result from each function 【发布时间】:2021-04-08 07:41:03 【问题描述】:

我从数据库中检索了一个 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

【问题讨论】:

【参考方案1】:

试试global 声明:

$calculation->each(function ($item, $key) 
   global $error_arr;

$error_arr 在您的代码中为空,因为它不存在于您的each 方法的回调function 的范围内。与其他语言(如 javascript)不同,函数外部的变量默认无法在函数内部访问。详情请见php's documentation on variable scope。

【讨论】:

感谢您的解决方案有效。我还必须在 Controller 函数的变量声明前添加 global $error_arr。这是在您链接的评论部分。这是因为 $calculation->each(function ($item, $key) 是我的 Controller 函数的子函数。

以上是关于Laravel 集合从每个函数中检索变量结果的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 刀片路由中使用 JavaScript 变量

如何从原始查询中检索结果集作为数组而不是 Laravel 3 中的对象

使用自定义连接检索模型时,Laravel出错

从 Laravel 中的关系中检索关系

Laravel 5.4:无法从关系中检索数据

Laravel:在刀片模板中调用静态函数