荷兰编码公司/csv-collection

使用Laravel的Illuminate Collections读写大型CSV文件

1.3.0 2024-04-26 10:11 UTC

This package is auto-updated.

Last update: 2024-08-26 10:59:08 UTC


README

Latest Version on Packagist Total Downloads

此包提供了一种简单但功能强大的方法,利用Laravel的延迟集合功能来读取和写入大型CSV文件。

安装

您可以通过composer安装此包

composer require dutchcodingcompany/csv-collection

使用方法

您可以使用new关键字或make方法创建一个集合。

CsvCollection::make();

这使您能够访问所有集合延迟集合方法。

打开

要打开一个文件并将内容加载到新的集合中,您可以在集合上使用open方法。

use DutchCodingCompany\CsvCollection\CsvCollection;

CsvCollection::make()
    ->open('path/to/file.csv')
    ->count();

保存

要保存集合项到文件,您可以在集合上使用save方法。

use DutchCodingCompany\CsvCollection\CsvCollection;

CsvCollection::make(static function () {
    yield [
        'key' => 'value',
    ];
})
    ->save('path/to/file.csv');

模型导出

在导出模型时,一种内存高效的方法是延迟遍历模型并yield其内容。

use DutchCodingCompany\CsvCollection\CsvCollection;

CsvCollection::make(static function () {
    $models = Model::query()->lazy();
    
    foreach ($models as $model){
        yield $model->only([
            'id',
            //
        ]);
    }
})
    ->save('path/to/file.csv');

选项

以下选项可用于满足您的需求

  • header,默认:true
  • delimiter,默认:,
  • enclosure,默认:"
  • escape,默认:\\

这些选项可以作为参数传递给open和save方法,使用options方法设置,或使用静态方法defaults作为全局默认值。

您可以使用如下所示的detectDelimiter方法检测文件的分隔符

CsvCollection::detectDelimiter($path);

标题

当使用标题时,行将包含关联数组。否则,行将包含索引数组。

// Without header
[
    0 => 'John',
    1 => 'Doe',
]

// With header
[
    'first_name' => 'John',
    'last_name' => 'Doe',
]

注意:当将集合保存到文件时,将使用集合中第一个元素的键作为标题。

测试

composer test

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。