- 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