langleyfoxall/eloquent-report-generator

Generates reports from Eloquent models in CSV, PDF, Markdown, HTML, etc.

v1.1.0 2023-08-23 09:41 UTC

This package is auto-updated.

Last update: 2024-10-11 10:46:30 UTC


README

This package can be used to generate reports from Eloquent models in many formats, such as CSV, PDF, Markdown, and HTML.

Installation

To install, just run the following composer command.

composer require langleyfoxall/eloquent-report-generator

Remember to include the vendor/autoload.php file if your framework does not do this for you.

Usage

First, add the Reportable trait to the model or models you wish to create reports from.

namespace App;

use Illuminate\Database\Eloquent\Model;
use LangleyFoxall\EloquentReportGenerator\Traits\Reportable;

class User extends Model
{
    use Reportable;
    
    // ...

You can then generate reports elsewhere in your application by calling the static generateReport method from this trait.

See the following code snippet for example usage.

// Report format
$format = (new CsvReportFormat());
//$format = (new PdfReportFormat());
//$format = (new MarkdownReportFormat());
//$format = (new HtmlReportFormat());

// Report generation
User::generateReport()
    ->format($format)
    ->query(function ($query) {
        // Restrict the records used in the report
        $query->where('created_at', '>=' '2018-01-01');  
    })
    ->fields(['email', 'name', 'created_at'])
    ->fieldMap([
        // Change how fields appear in the report
        'email' => 'Email address',
        'name' => 'Name',
        'created_at' => 'Joined Date',
    ])
    ->dataRowManipulator(function (DataRow $dataRow) {
        // Format the 'name' field
        $name = $dataRow->getDataItemByFieldName('name');
        $name->value = ucwords($name);
    }
    ->save(storage_path('app/report.csv'));