Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bayareawebpro/laravel-simple-csv
A simple CSV importer / exporter for Laravel Framework that supports Lazy Collections and Stream Downloads
https://github.com/bayareawebpro/laravel-simple-csv
csv download export import laravel lazycollection simple splitting-utility
Last synced: 2 months ago
JSON representation
A simple CSV importer / exporter for Laravel Framework that supports Lazy Collections and Stream Downloads
- Host: GitHub
- URL: https://github.com/bayareawebpro/laravel-simple-csv
- Owner: bayareawebpro
- License: mit
- Created: 2018-07-29T14:07:39.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-06-04T03:03:12.000Z (7 months ago)
- Last Synced: 2024-10-07T10:55:51.074Z (3 months ago)
- Topics: csv, download, export, import, laravel, lazycollection, simple, splitting-utility
- Language: PHP
- Homepage:
- Size: 590 KB
- Stars: 17
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Laravel Simple CSV
![](https://github.com/bayareawebpro/laravel-simple-csv/workflows/ci/badge.svg)
![](https://codecov.io/gh/bayareawebpro/laravel-simple-csv/branch/master/graph/badge.svg)
![](https://img.shields.io/github/v/release/bayareawebpro/laravel-simple-csv.svg)
![](https://img.shields.io/packagist/dt/bayareawebpro/laravel-simple-csv.svg)
![](https://img.shields.io/badge/License-MIT-success.svg)> https://packagist.org/packages/bayareawebpro/laravel-simple-csv
## Features
- Import to LazyCollection.
- Export from Collection, LazyCollection, Iterable, Generator, Array.
- Low(er) Memory Consumption by use of LazyCollection Generators.
- Uses Native PHP SplFileObject.
- Facade Included.## Installation
Require the package and Laravel will Auto-Discover the Service Provider.```
composer require bayareawebpro/laravel-simple-csv
```## Usage:
Invokable classes can be passed to the import method allowing you to customize
how each row is processed. Two classes to handle numerics
and null values have been supplied.```php
use BayAreaWebPro\SimpleCsv\SimpleCsv;
use BayAreaWebPro\SimpleCsv\Casts\EmptyValuesToNull;
use BayAreaWebPro\SimpleCsv\Casts\NumericValues;$lazyCsvCollection = SimpleCsv::import(storage_path('collection.csv'), [
EmptyValuesToNull::class,
NumericValues::class,
]);
```### Invokable Classes
**Dependency Injection:** Invokable classes can typehint required dependencies in a
constructor method when defined.```php
$value){
if(in_array($key, ['created_at', 'updated_at'])){
$item[$key] = Carbon::parse($value);
}
}
return $item;
}
}
```### Export to File
```php
use BayAreaWebPro\SimpleCsv\SimpleCsv;// Collection
SimpleCsv::export(
Collection::make(...),
storage_path('collection.csv')
);// LazyCollection
SimpleCsv::export(
LazyCollection::make(...),
storage_path('collection.csv')
);// Generator (Cursor)
SimpleCsv::export(
User::query()->where(...)->limit(500)->cursor(),
storage_path('collection.csv')
);// Array
SimpleCsv::export(
[...],
storage_path('collection.csv')
);
```### Export Download Stream
```php
use BayAreaWebPro\SimpleCsv\SimpleCsv;return SimpleCsv::download([...], 'download.csv');
```#### Override Options
```php
use Illuminate\Support\Facades\Config;Config::set('simple-csv.delimiter', ...);
Config::set('simple-csv.enclosure', ...);
Config::set('simple-csv.escape', ...);
```## Or, Create a Config File
`config/simple-csv.php`
```php
return [
'delimiter' => '?',
'enclosure' => '?',
'escape' => '?',
];
```## File Splitting Utility
A file splitting utility has been included that will break large CSV files into chunks
(while retaining column headers) which you can move/delete after importing.
This can help with automating the import of large data sets.Tip: Find your Bash Shell Binary Path: `which sh`
```
/bin/sh vendor/bayareawebpro/laravel-simple-csv/split-csv.sh /Projects/laravel/storage/big-file.csv 5000File Output:
/Projects/laravel/storage/big-file-chunk-1.csv (chunk of 5000)
/Projects/laravel/storage/big-file-chunk-2.csv (chunk of 5000)
/Projects/laravel/storage/big-file-chunk-3.csv (chunk of 5000)
etc...
```## Speed Tips
- Using Lazy Collections is the preferred method.
- Using the queue worker, you can import a several thousand rows at a time without much impact.
- Be sure to use "Database Transactions" and "Timeout Detection" to insure safe imports.
- [Article: How to Insert & Update Many at Once](https://medium.com/@danielalvidrez/laravel-query-builder-macros-fe176d34135e)