代码之家  ›  专栏  ›  技术社区  ›  Hardist

laravel each()方法

  •  0
  • Hardist  · 技术社区  · 7 年前

    我正试图理解为什么以下内容总是返回错误:

    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" 正在显示。

    有人能解释一下为什么会这样吗,因为我不明白。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Brian Lee    7 年前

    这个 each true 被退回。但是,当 false 被退回。

    如果要停止对项的迭代,可以从回调返回false:

    Collection Methods - each()

    您的方法只返回 也。

    如果试图验证所有事务都属于日期范围,则使用 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);
    });