【问题标题】:Laravel collection retrieve variable result from each functionLaravel 集合从每个函数中检索变量结果
【发布时间】: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

【问题讨论】:

    标签: php eloquent scope laravel-5.6 laravel-collection


    【解决方案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 函数的子函数。
    猜你喜欢
    • 2019-03-05
    • 2014-06-15
    • 1970-01-01
    • 2015-07-22
    • 2023-04-06
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多