All Projects → usmanhalalit → Laracsv

usmanhalalit / Laracsv

Licence: mit
A Laravel package to easily generate CSV files from Eloquent model

Projects that are alternatives of or similar to Laracsv

Pyetl
python ETL framework
Stars: ✭ 33 (-94.34%)
Mutual labels:  excel, csv, export
Simple Excel
Read and write simple Excel and CSV files
Stars: ✭ 502 (-13.89%)
Mutual labels:  excel, csv, export
Tableexport
The simple, easy-to-implement library to export HTML tables to xlsx, xls, csv, and txt files.
Stars: ✭ 781 (+33.96%)
Mutual labels:  excel, csv, export
Excellentexport
Javascript export to Excel
Stars: ✭ 1,018 (+74.61%)
Mutual labels:  excel, csv, export
Fast Excel
🦉 Fast Excel import/export for Laravel
Stars: ✭ 1,183 (+102.92%)
Mutual labels:  excel, csv, laravel
sheet2dict
Simple XLSX and CSV to dictionary converter
Stars: ✭ 206 (-64.67%)
Mutual labels:  export, csv, excel
Portphp
Data import/export framework for PHP
Stars: ✭ 225 (-61.41%)
Mutual labels:  excel, csv, export
Laravel Report Generator
Rapidly Generate Simple Pdf, CSV, & Excel Report Package on Laravel
Stars: ✭ 380 (-34.82%)
Mutual labels:  excel, csv, laravel
Performance
⏱ PHP performance tool analyser your script on time, memory usage and db query. Support Laravel and Composer for web, web console and command line interfaces.
Stars: ✭ 429 (-26.42%)
Mutual labels:  export, laravel
Es2csv
Export from an Elasticsearch into a CSV file
Stars: ✭ 465 (-20.24%)
Mutual labels:  csv, export
Rio
A Swiss-Army Knife for Data I/O
Stars: ✭ 467 (-19.9%)
Mutual labels:  excel, csv
Excelmerge
GUI Diff Tool for Excel
Stars: ✭ 425 (-27.1%)
Mutual labels:  excel, csv
Lada Cache
A Redis based, fully automated and scalable database cache layer for Laravel
Stars: ✭ 424 (-27.27%)
Mutual labels:  eloquent, laravel
Laravel Medialibrary
Associate files with Eloquent models
Stars: ✭ 4,743 (+713.55%)
Mutual labels:  eloquent, laravel
Pytablewriter
pytablewriter is a Python library to write a table in various formats: CSV / Elasticsearch / HTML / JavaScript / JSON / LaTeX / LDJSON / LTSV / Markdown / MediaWiki / NumPy / Excel / Pandas / Python / reStructuredText / SQLite / TOML / TSV.
Stars: ✭ 422 (-27.62%)
Mutual labels:  excel, csv
Laravel Wallet
Easy work with virtual wallet
Stars: ✭ 401 (-31.22%)
Mutual labels:  eloquent, laravel
Laravel Moderation
A simple Content Moderation System for Laravel 5.* that allows you to Approve or Reject resources like posts, comments, users, etc.
Stars: ✭ 487 (-16.47%)
Mutual labels:  eloquent, laravel
Squire
A library of static Eloquent models for common fixture data.
Stars: ✭ 496 (-14.92%)
Mutual labels:  eloquent, laravel
Laravel Cascade Soft Deletes
Cascading deletes for Eloquent models that implement soft deletes
Stars: ✭ 498 (-14.58%)
Mutual labels:  eloquent, laravel
Tabula
Tabula is a tool for liberating data tables trapped inside PDF files
Stars: ✭ 5,420 (+829.67%)
Mutual labels:  excel, csv

LaraCSV

A Laravel package to easily generate CSV files from Eloquent model.

Build Status Total Downloads Daily Downloads

Basic usage

$users = User::get(); // All users
$csvExporter = new \Laracsv\Export();
$csvExporter->build($users, ['email', 'name'])->download();

And a proper CSV file will be downloaded with email and name fields. As simple as it sounds!

Installation

Just run this on your terminal:

composer require usmanhalalit/laracsv:^2.1

and you should be good to go.

Full Documentation

Build CSV

$exporter->build($modelCollection, $fields) takes three parameters. First one is the model (collection of models), seconds one takes the field names you want to export, third one is config, which is optional.

$csvExporter->build(User::get(), ['email', 'name', 'created_at']);

Output Options

Download

To get file downloaded to the browser:

$csvExporter->download();

You can provide a filename if you wish:

$csvExporter->download('active_users.csv');

If no filename is given a filename with date-time will be generated.

Advanced Outputs

LaraCSV uses League CSV. You can do what League CSV is able to do. You can get the underlying League CSV writer and reader instance by calling:

$csvWriter = $csvExporter->getWriter();
$csvReader = $csvExporter->getReader();

And then you can do several things like:

$csvString = $csvWriter->getContent(); // To get the CSV as string
$csvReader->jsonSerialize(); // To turn the CSV in to an array

For more information please check League CSV documentation.

Custom Headers

Above code example will generate a CSV with headers email, name, created_at and corresponding rows after.

If you want to change the header with a custom label just pass it as array value:

$csvExporter->build(User::get(), ['email', 'name' => 'Full Name', 'created_at' => 'Joined']);

Now name column will show the header Full Name but it will still take values from name field of the model.

No Header

You can also suppress the CSV header:

$csvExporter->build(User::get(), ['email', 'name', 'created_at'], [
    'header' => false,
]);

Modify or Add Values

There is a hook which is triggered before processing a database row. For example, if you want to change the date format you can do so.

$csvExporter = new \Laracsv\Export();
$users = User::get();

// Register the hook before building
$csvExporter->beforeEach(function ($user) {
    $user->created_at = date('f', strtotime($user->created_at));
});

$csvExporter->build($users, ['email', 'name' => 'Full Name', 'created_at' => 'Joined']);

Note: If a beforeEach callback returns false then the entire row will be excluded from the CSV. It can come handy to filter some rows.

Add fields and values

You may also add fields that don't exists in a database table add values on the fly:

// The notes field doesn't exist so values for this field will be blank by default
$csvExporter->beforeEach(function ($user) {
    // Now notes field will have this value
    $user->notes = 'Add your notes';
});

$csvExporter->build($users, ['email', 'notes']);

Model Relationships

You can also add fields in the CSV from related database tables, given the model has relationships defined.

This will get the product title and the related category's title (one to one):

$csvExporter->build($products, ['title', 'category.title']);

You may also tinker relation things as you wish with hooks:

$products = Product::with('categories')->where('order_count', '>', 10)->orderBy('order_count', 'desc')->get();
$fields = ['id', 'title','original_price' => 'Market Price', 'category_ids',];
$csvExporter = new \Laracsv\Export();
$csvExporter->beforeEach(function ($product) {
    $product->category_ids = implode(', ', $product->categories->pluck('id')->toArray());
});

Build by chunks

For larger datasets, which can become more memory consuming, a builder instance can be used to process the results in chunks. Similar to the row-related hook, a chunk-related hook can be used in this case for e.g. eager loading or similar chunk based operations. The behaviour between both hooks is similar; it gets called before each chunk and has the entire collection as an argument. In case false is returned the entire chunk gets skipped and the code continues with the next one.


// Perform chunk related operations
$export->beforeEachChunk(function ($collection) {
    $collection->load('categories');
});

$export->buildFromBuilder(Product::select(), ['category_label']);

The default chunk size is set to 1000 results but can be altered by passing a different value in the $config passed to buildFromBuilder. Example alters the chunk size to 500.

// ...

$export->buildFromBuilder(Product::select(), ['category_label'], ['chunk' => 500]);

© Muhammad Usman. Licensed under MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].