首页 > 解决方案 > 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"正在显示。

有人可以解释为什么会这样,因为我不明白。

标签: laravelforeacheach

解决方案


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

如果您想停止遍历项目,可以从回调中返回 false:

收集方法 - each()

您的方法也只会返回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);
});

推荐阅读