Laravel each() method



我试图理解为什么以下内容总是返回 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))
{
return true;
}
return false;
});
return false;
}

当我删除两个return false时,将显示null

当我使用常规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"

有人可以解释为什么会发生这种情况,因为我不明白。

返回true时,each方法不会停止迭代。但是,当返回false时,它确实会停止。

如果你想停止迭代这些项目,你可以从回调中返回 false:

收集方法 - each((

您的方法也只返回false

如果您尝试验证所有交易都在某个日期范围内,请使用 each 方法:

// 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);
});

相关内容

最新更新