1. Go to this page and download the library: Download nvl/csv library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Nvl\Csv\Contracts\CSVAnalyzerContract;
$analysis = (new CSVAnalyzerService())->analyzeFile($absolutePath);
$analysis->detectedDelimiter;
$analysis->detectedEncoding;
$analysis->headers;
$analysis->columnAnalysis;
$analysis->issues;
$analysis->recommendations;
use Nvl\Csv\Enums\CSVTypeEnum;
use Nvl\Csv\Contracts\CSVImportContract;
use Nvl\Csv\ValueObjects\CSVFieldMapping;
$result = CSVImport::make()
->fromDisk('imports', 'incoming/people.csv')
->mapField(
'age',
'age',
CSVFieldMapping::typed('age', 'age', CSVTypeEnum::INTEGER, oid {
// Call an application Action or perform the intended persistence write.
})
->import();
foreach (CSVImport::make()->fromFile($path)->stream() as $rowNumber => $row) {
// Streaming does not create an enclosing database transaction.
}
$result = CSVImport::make()
->fromFile($path)
->onConnection('tenant')
->batch(500, static function (array $rows, int $batchNumber): void {
// Each callback is wrapped in its own transaction by default.
});
use Illuminate\Bus\Batch;
use Nvl\Csv\Contracts\CSVAsyncProcessorContract;
$batch = CSVAsyncProcessor::make()
->fromFile($path)
->withOptions($options)
->withChunkSize(1_000)
->mapField('email', 'email')
->processRow(static function (array $row, int $rowNumber): void {
// Execute idempotent application work.
})
->onBatchComplete(static function (int $chunk, int $processed, array $errors): void {
// Per-job summary.
})
->onProgress(static function (Batch $batch): void {
// Laravel batch progress callback.
})
->onComplete(static function (Batch $batch): void {
// Laravel batch finally callback.
})
->processAsync();
use Nvl\Csv\Contracts\CSVImportContract;
use Nvl\Csv\ValueObjects\CSVImportResult;
final readonly class ImportContacts
{
public function __construct(private CSVImportContract $imports) {}
public function run(string $path): CSVImportResult
{
return $this->imports->fromFile($path)->import();
}
}
$result = new CSVImportResult(1, 1, 1, 0, 0);
$imports = Mockery::mock(CSVImportContract::class);
$imports->shouldReceive('fromFile')->once()->with('/fixtures/contacts.csv')->andReturnSelf();
$imports->shouldReceive('import')->once()->withNoArgs()->andReturn($result);
$this->app->instance(CSVImportContract::class, $imports);
$actual = $this->app->make(ImportContacts::class)->run('/fixtures/contacts.csv');
expect($actual)->toBe($result);
use Nvl\Csv\Contracts\CSVExportContract;
$double = Mockery::mock(CSVExportContract::class);
$this->app->instance(CSVExportContract::class, $double);
// Configure the exact fromArray arguments and documented return value for your host case.
sh
composer n nvl:install csv --dry-run
php artisan nvl:install csv