如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?

Posted

技术标签:

【中文标题】如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?【英文标题】:How to use break or continue with Laravel Eloquent Collection's each method? 【发布时间】:2015-06-25 21:06:36 【问题描述】:

如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue。 我的代码是这样的:

$objectives->each(function($objective) 
        Collection::make($objective)->each(function($action) 
            Collection::make($action)->each(function($success_indicator) 
                Collection::make($success_indicator)->each(function($success_indicator) 
                    echo 'hi';
                    continue;
                );
            );
        );
    );

【问题讨论】:

作为break 的解决方法,您可以在收集时使用first 方法。当您返回第一个 true 结果时,它将停止迭代。但最好向我们展示你真正想要做什么,为什么你需要这个breakcontinue 在某些情况下,我们可以使用exit(); 代替 continuereturn true; return true; 解决方案如下所示。 【参考方案1】:

就我而言,它正在按我的意愿工作。我检查了上面提到的所有代码。但不工作。请注意,我的版本是 Laravel -5.5

 return collect($models->items())->each(function ($item, $index)
        if( !$item->quoteReturnDetail)  echo  $item ;  exit();    );

【讨论】:

【参考方案2】:

我们可以返回true/false true for continue, false for break

继续:

collect([1,2,3,4])->each(function ($item)
            if ($item === 2) 
                return true;
            
            echo $item;
);

输出: 1 3 4

休息:

collect([1,2,3,4])->each(function ($item)
            if ($item === 2) 
                return false;
            
            echo $item;
);

输出: 1

【讨论】:

实际上你可以只用return; 换成continue,因为要做到break,你需要显式返回false 不工作 .. return collect($models->items())->each(function ($item, $index) if( $item->quoteReturnDetail) return false; echo "测试"; );【参考方案3】:

continue, 只是return 出了内部函数。给break,嗯..

如果你使用的是 Laravel 5.1+,你可以返回 false 来打破循环:

$objectives->each(function($objective) 
    collect($objective)->each(function($action) 
        collect($action)->each(function($success_indicator) 
            collect($success_indicator)->each(function($success_indicator) 
                if ($condition) return false;
            );
        );
    );
);

对于旧版本的 Laravel,使用常规的 foreach 循环:

$objectives->each(function($objective) 
    foreach ($objective as $action) 
        foreach ($action as $success_indicators) 
            foreach ($success_indicators as $success_indicator) 
                echo 'hi';
                break;
            
        
    
);

【讨论】:

例如文档5.6 只是说明如何break out: laravel.com/docs/5.6/collections#method-each 而不是如何跳过当前项目。 @Roland 跳过,只是return 什么都没有。将退出函数的当前调用,并继续循环中的下一项。

以上是关于如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.8 中使用 Eloquent 进行查询?

如何使用 Eloquent 在 Laravel 中开始查询?

如何在 laravel 5 中使用 Eloquent 更新数据透视表

如何在 Laravel Eloquent 中选择某些字段?

如何在 Eloquent/Laravel 上查询子查询

如何在 Laravel 4 中手动创建一个新的空 Eloquent 集合