PHP code example of nvl / csv

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/ */

    

nvl / csv example snippets


use Nvl\Csv\Contracts\CSVExportContract;

/** @var CSVExportContract $capability */
$result = $capability->disk('local')->fromArray([['id' => 1]]);

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 Nvl\Csv\Data\CSVImportOptionsData;
use Nvl\Csv\Enums\CSVDelimiterEnum;
use Nvl\Csv\Enums\CSVEncodingEnum;
use Nvl\Csv\Enums\CSVTypeEnum;

$options = CSVImportOptionsData::from([
    'filePath' => $path,
    'delimiter' => CSVDelimiterEnum::SEMICOLON,
    'encoding' => CSVEncodingEnum::WINDOWS_1252,
    'skipRows' => 2,
    'limitRows' => 10_000,
    'hasHeaders' => true,
    'skipEmptyRows' => true,
    'strictMode' => true,
    'columnMapping' => ['external_id' => 'id'],
    'columnTypes' => ['external_id' => CSVTypeEnum::INTEGER],
    'metadata' => ['source' => 'partner-feed'],
]);

$result = CSVImport::make()
    ->withOptions($options)
    ->fromFile($path)
    ->import();

use Nvl\Csv\Contracts\CSVExportContract;
use Nvl\Csv\ValueObjects\CSVConfiguration;

$result = CSVExport::make()
    ->configure(CSVConfiguration::excel()->withIncludeIndex())
    ->disk('exports')
    ->path('reports')
    ->filename('people.csv')
    ->headings(['Name', 'Email'])
    ->fields(['name', 'email'])
    ->fromQuery($peopleQuery);

use Nvl\Csv\Data\CSVExportOptionsData;
use Nvl\Csv\Enums\CSVEncodingEnum;
use Nvl\Csv\Enums\CSVExportFormatEnum;

$options = CSVExportOptionsData::from([
    'disk' => 'exports',
    'path' => 'reports',
    'filename' => 'people.csv',
    'format' => CSVExportFormatEnum::RFC4180,
    'encoding' => CSVEncodingEnum::UTF8_BOM,
    'headings' => ['Name', 'Email'],
    'fields' => ['name', 'email'],
]);

$result = CSVExport::make()->withOptions($options)->fromArray($rows);

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
bash
php artisan make:queue-batches-table
php artisan migrate
bash
php artisan vendor:publish --tag=nvl-csv-translations
php artisan vendor:publish --tag=nvl-csv-skills