laravel - Laravel each() 方法
问题描述
我试图理解为什么以下内容总是返回错误:
public function checkDate($transactions)
{
$start = Carbon::now()->subMonth();
$end = Carbon::now();
$transactions->each(function ($transaction) use ($start, $end) {
$date = Carbon::createFromFormat('Y-m-d', $transaction->date);
if ($date->between($start, $end))
{
return true;
}
return false;
});
return false;
}
当我同时删除return false
, thennull
正在显示。
当我使用常规foreach
时,它可以工作:
$start = Carbon::now()->subMonth();
$end = Carbon::now();
foreach($transactions as $transaction)
{
$date = Carbon::createFromFormat('Y-m-d', $transaction->date);
if($date->between($start, $end))
{
return true;
}
return false;
}
我不明白的是,当我执行以下操作时:
public function checkDate($transactions)
{
$start = Carbon::now()->subMonth();
$end = Carbon::now();
$transactions->each(function ($transaction) use ($start, $end) {
$date = Carbon::createFromFormat('Y-m-d', $transaction->date);
if ($date->between($start, $end))
{
dd('test');
return true;
}
return false;
});
return false;
}
然后"test"
正在显示。
有人可以解释为什么会这样,因为我不明白。
解决方案
该each
方法在返回时不会停止迭代true
。但是,它会在false
返回时停止。
如果您想停止遍历项目,可以从回调中返回 false:
您的方法也只会返回false
。
如果您尝试验证所有交易都属于某个日期范围,请使用every方法:
// returns true if all transactions date are between start and end, otherwise returns false.
return $transactions->every(function ($transaction) use ($start, $end) {
$date = Carbon::createFromFormat('Y-m-d', $transaction->date);
return $date->between($start, $end);
});
推荐阅读
- angular - 在来自数组的按钮的 ngFor 循环中生成不同的(单击)属性
- amazon-web-services - 难以理解 AWS cloudwatch 警报
- javascript - 使用 JQuery 从串联输入值的字符串中搜索并返回 JSON 文件值
- angular - 访问被 CORS 策略阻止:对预检请求的响应未通过访问控制检查
- kubernetes - Kubernetes 在使用 Helm 安装包时请求凭据
- javascript - 为什么当我触发函数时输入类型=数值为空
- html - 检查是否在 Div 区域内 onclick 事件
- swift - 使用 SwiftUI 呈现 ActionSheet 的正确方法
- c - 关于删除/替换结构
- regex - 正则表达式匹配日志文件中的 url 给出了行继续错误 - 我需要转义什么?