Группа LazyCollectionБудет работать не так, как задумано - PullRequest
0 голосов
/ 12 марта 2020
  • Laravel Версия: 6.18.0
  • PHP Версия: 7.3

с использованием groupBy в LazyCollection возвращает Collection вместо LazyCollection

Я пытался использовать следующий код:

// ContactHelper.php
public static function getContacts($file, $listId, $defaultPrefix = null)
    {
        return LazyCollection::make(function() use ($file, $listId, $defaultPrefix) {
            $f = fopen($file, 'r');

            // read each line of the file without loading the whole file to memory
            while ($line = fgets($f))
            {
                $row = explode(",", $line);

                if (trim(urlencode(strtolower(trim($row[0]))), '%EF%BB%BF') == "phone" || empty(trim($row[0])))
                {
                    continue;
                }
                yield [
                    'phone'     => !empty($row[0]) ? handleInvalidStrings(trim($row[0])) : '',
                    'firstname' => !empty($row[1]) ? handleInvalidStrings(trim($row[1])) : '',
                    'lastname'  => !empty($row[2]) ? handleInvalidStrings(trim($row[2])) : '',
                    'email'     => !empty($row[3]) ? handleInvalidStrings(trim($row[3])) : '',
                    'custom1'   => !empty($row[4]) ? handleInvalidStrings(trim($row[4])) : '',
                    'custom2'   => !empty($row[5]) ? handleInvalidStrings(trim($row[5])) : '',
                    'list_id'   => $listId,
                ];
            }
        });
    }

$contacts = \App\Helpers\ContactHelper::getContacts(public_path('/file_250k.csv'), 113); 
// LazyCollection
    $test = $contacts->groupBy('phone')->chunk(20)->each(function ($item, $key) {
        dd($item); // LazyCollection with Collection inside
    });

Результат: https://www.dropbox.com/s/j17x4qh96l0q7jc/Screenshot%202020-03-10%2023.15.08.png?dl=0

...