cbytedigital / laravel-bi-data-export
Laravel package for easily and periodically exporting data for BI purposes. Built in functionality for excluding or redacting columns and exporting to CSV on a Laravel filesystem disk.
Installs: 2 141
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 0
Forks: 0
Open Issues: 1
Requires
- php: ^8.0
- laravel/framework: ^8.37|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^6.12.1
- phpunit/phpunit: ^9.3.3
This package is auto-updated.
Last update: 2024-10-24 12:34:35 UTC
README
A Laravel package which can be used for easily and periodically exporting large datasets for BI purposes. Includes built in functionality for excluding or redacting columns and exporting to CSV on a Laravel filesystem disk.
The package uses database cursors and streaming to support working with large datasets and keep memory usage to a minimum for poor little webservers.
Installation
Use composer to install this package:
$ composer require cbytedigital/laravel-bi-data-export
Optional: The service provider will automatically get registered. Or you may manually add the service provider in your config/app.php file:
'providers' => [ // ... CbyteDigital\BiDataExport\BiDataExportServiceProvider::class, ];
You should publish the config with:
php artisan vendor:publish --provider="CbyteDigital\BiDataExport\BiDataExportServiceProvider"
Usage
Currently, only exporting to .CSV is supported. Which is the most usual method of exporting large datasets. Lucky, you can write your own implemention of a export job and reference the class in the config.
The export can be used directly in requests (sync), but it is recommended to use background workers and queueing.
To include your models for the export, configure your models to use the BiExportable
trait.
class Client extends Model { use BiExportable; }
If desired define the selected and/or hidden fields in your model as follows (optional):
class Client extends Model { use BiExportable; // Default behaviour public $biExportable = '*'; // Or select specific columns public $biExportable = [ 'id', 'username' ]; // Values of hidden fields will be replaced public $biHidden = [ 'first_name', 'last_name' ]; // Define the placeholder value for hidden fields. // If not defined will resort to using the variable defined in the config. public $biHiddenText = 'REDACTED'; }
If you require to export for example a pivot table, which does usually not have a dedicated model, you can manually add the table and required columns/config for exporting to the configuration file.
<?php return [ /** * Define models for exporting * ... */ 'models' => [ \App\Models\Model::class ], /** * Define tables for exporting * ... */ 'tables' => [ 'partners' => [ 'columns' => '*' ] ], /** * Determines the export action. You can define your own implementation here. */ 'export_job' => CbyteDigital\BiDataExport\Jobs\ExportBiToCsv::class, /** * Determines the export location. */ 'export_disk' => env('BI_EXPORT_DISK', 's3'), /** * CSV export job delimiter value */ 'export_csv_delimiter' => env('BI_EXPORT_CSV_DELIMITER', ';'), /** * Default replacement value if not overwritten by the model or tables config. */ 'default_hidden_text' => env('BI_HIDDEN_TEXT', 'REDACTED'), /** * Ability to add a prefix to the filename. For example: {prefix}table.sql */ 'filename_prefix' => env('BI_FILENAME_PREFIX'), /** * Ability to add a suffix to the filename. For example: table{suffix}.sql */ 'filename_suffix' => env('BI_FILENAME_SUFFIX') ];
Add the command for exporting on a schedule:
$schedule->command(ExportBiDataCommand::class)->dailyAt('23:00');
Or call it manually:
php artisan bi:export-data
Testing
Run the tests with:
$ composer test
Support
Postcardware
This package is completely free to use. If it makes it to your production environment we would highly appreciate you sending us a postcard from your hometown! 👏🏼
Our address is: CBYTE Software B.V., Heuvelkamp 2a, 6658DE Beneden-Leeuwen, Netherlands.
License
The MIT License (MIT). Please see License File for more information.