PHPackages                             laraveldaily/laravel-charts - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. laraveldaily/laravel-charts

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

laraveldaily/laravel-charts
===========================

Create charts and reports from Laravel

0.2.3(2y ago)553442.1k—3.3%117[21 issues](https://github.com/LaravelDaily/laravel-charts/issues)[3 PRs](https://github.com/LaravelDaily/laravel-charts/pulls)MITPHP

Since Feb 17Pushed 2y ago21 watchersCompare

[ Source](https://github.com/LaravelDaily/laravel-charts)[ Packagist](https://packagist.org/packages/laraveldaily/laravel-charts)[ RSS](/packages/laraveldaily-laravel-charts/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)DependenciesVersions (37)Used By (0)

Laravel Charts
--------------

[](#laravel-charts)

Package to generate Chart.js charts directly from Laravel/Blade, without interacting with JavaScript.

---

Simple Usage
------------

[](#simple-usage)

[![Laravel Charts - Users by Months](https://camo.githubusercontent.com/3c9dc9037d7d383e99a5bc3cbf4692067c3145155a06d54ed12d25586e43a775/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33372e30392d504d2e706e67)](https://camo.githubusercontent.com/3c9dc9037d7d383e99a5bc3cbf4692067c3145155a06d54ed12d25586e43a775/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33372e30392d504d2e706e67)

If you want to generate a chart above, grouping **users** records by the month of **created\_at** value, here's the code.

**Controller**:

```
use LaravelDaily\LaravelCharts\Classes\LaravelChart;

// ...

$chart_options = [
    'chart_title' => 'Users by months',
    'report_type' => 'group_by_date',
    'model' => 'App\Models\User',
    'group_by_field' => 'created_at',
    'group_by_period' => 'month',
    'chart_type' => 'bar',
];
$chart1 = new LaravelChart($chart_options);

return view('home', compact('chart1'));
```

**View File**

```
@extends('layouts.app')

@section('content')

                Dashboard

                    {{ $chart1->options['chart_title'] }}
                    {!! $chart1->renderHtml() !!}

@endsection

@section('javascript')
{!! $chart1->renderChartJsLibrary() !!}
{!! $chart1->renderJs() !!}
@endsection
```

---

Installation
------------

[](#installation)

```
composer require laraveldaily/laravel-charts
```

No additional configuration or other parameters yet.

---

Usage
-----

[](#usage)

You need to create `LaravelChart` object in your Controller, passing array of options.

```
$chart = new LaravelChart($options);
```

Then pass it to the View, as a variable:

```
return view('dashboard', compact('chart'));
```

---

Available Reports and Options
-----------------------------

[](#available-reports-and-options)

Currently package support three types of charts/reports:

- `group_by_date` - amount of records from the same table, grouped by time period - day/week/month/year;
- `group_by_string` - amount of records from the same table, grouped by any string field, like `name`;
- `group_by_relationship` - amount of records from the same table, grouped by `belongsTo` relationship's field

### NOTE: From Laravel 8, all its models are placed in a folder called Models (App\\Models)

[](#note-from-laravel-8-all-its-models-are-placed-in-a-folder-called-models-appmodels)

**Example with all options**

```
$chart_options = [
    'chart_title' => 'Transactions by dates',
    'chart_type' => 'line',
    'report_type' => 'group_by_date',
    'model' => 'App\Models\Transaction',
    'conditions'            => [
        ['name' => 'Food', 'condition' => 'category_id = 1', 'color' => 'black', 'fill' => true],
        ['name' => 'Transport', 'condition' => 'category_id = 2', 'color' => 'blue', 'fill' => true],
    ],

    'group_by_field' => 'transaction_date',
    'group_by_period' => 'day',

    'aggregate_function' => 'sum',
    'aggregate_field' => 'amount',
    'aggregate_transform' => function($value) {
        return round($value / 100, 2);
    },

    'filter_field' => 'transaction_date',
    'filter_days' => 30, // show only transactions for last 30 days
    'filter_period' => 'week', // show only transactions for this week
    'continuous_time' => true, // show continuous timeline including dates without data
];
```

- `chart_title` (required) - just a text title that will be shown as legend;
- `chart_type` (required) - possible values: "line", "bar", "pie";
- `report_type` (required) - see above, can be `group_by_date`, `group_by_string` or `group_by_relationship`;
- `model` (required) - name of Eloquent model, where to take the data from;
- `name` (optional) - just a text title that will be shown as title, otherwise the legend is used;
- `conditions` (optional, only for `line` chart type) - array of conditions (name + raw condition + color) for multiple datasets;
- `group_by_field` (required) - name of database field that will be used in `group_by` clause;
- `group_by_period` (optional, only for `group_by_date` report type) - possible values are "day", "week", "month", "year";
- `relationship_name` (optional, only for `group_by_relationship` report type) - the name of model's method that contains `belongsTo` relationship.
- `aggregate_function` (optional) - you can view not only amount of records, but also their `SUM()` or `AVG()`. Possible values: "count" (default), "avg", "sum".
- `aggregate_field` (optional) - see `aggregate_function` above, the name of the field to use in `SUM()` or `AVG()` functions. Irrelevant for `COUNT()`.
- `aggregate_transform` (optional) - callback function for additional transformation of aggregate number
- `filter_field` (optional) - show only data filtered by that datetime field (see below)
- `filter_days` (optional) - see `filter_field` above - show only last `filter_days` days of that field. Example, last **30** days by `created_at` field.
- `filter_period` (optional) - another way to filter by field, show only record from last **week** / **month** / **year**. Possible values are "week", "month", "year".
- `continuous_time` (optional) - show all dates on chart, including dates without data.
- `show_blank_data` (optional) - show date even if the data is blank based on `filter_days`.
- `range_date_start` (optional) - show data in from a date range by `filter_field`, this is the start date.
- `range_date_end` (optional) - show data in from a date range by `filter_field`, this is the end date.
- `field_distinct` (optional) - field name required, it will apply a distinct(fieldname)
- `style_class` (optional) - add class css in canvas
- `date_format` (optional) - add the date format, by default: American format Y-m-d
- `where_raw` (optional) - Condition in multiple consultation situations
- `chart_height` (optional) - add the height in options, default 300px
- `date_format_filter_days` (optional) - add the date format for Filter days
- `withoutGlobalScopes` (optional) - removes global scope restriction from queried model
- `with_trashed` (optional) - includes soft deleted models
- `only_trashed` (optional) - only displays soft deleted models
- `top_results` (optional, integer) - limit number of results shown, see [Issue #49](https://github.com/LaravelDaily/laravel-charts/issues/49)
- `chart_color` (optional, value in rgba, like "0,255,255") - defines the color of the chart
- `labels` (optional, array with key and value) - defines key value array mapping old and new values
- `hidden` (optional, boolean) hides the current dataset. Useful when having multiple datasets in one chart
- `stacked` (optional, boolean, only for bar chart) stacks the chart data when dates or strings match instead of showing it next to eachother

---

Example with relationship
-------------------------

[](#example-with-relationship)

```
$chart_options = [
    'chart_title' => 'Transactions by user',
    'chart_type' => 'line',
    'report_type' => 'group_by_relationship',
    'model' => 'App\Models\Transaction',

    'relationship_name' => 'user', // represents function user() on Transaction model
    'group_by_field' => 'name', // users.name

    'aggregate_function' => 'sum',
    'aggregate_field' => 'amount',

    'filter_field' => 'transaction_date',
    'filter_days' => 30, // show only transactions for last 30 days
    'filter_period' => 'week', // show only transactions for this week
];
```

---

Rendering Charts in Blade
-------------------------

[](#rendering-charts-in-blade)

After you passed `$chart` variable, into Blade, you can render it, by doing **three** actions:

**Action 1. Render HTML**.

Wherever in your Blade, call this:

```
{!! $chart1->renderHtml() !!}
```

It will generate something like this:

```

```

**Action 2. Render JavaScript Library**

Package is using Chart.js library, so we need to initialize it somewhere in scripts section:

```
{!! $chart1->renderChartJsLibrary() !!}
```

It will generate something like this:

```

```

**Action 3. Render JavaScript of Specific Chart**

After Chart.js is loaded, launch this:

```
{!! $chart1->renderJs() !!}
```

---

Using Multiple Charts
---------------------

[](#using-multiple-charts)

You can show multiple charts on the same page, initialize them separately.

**Controller**:

```
public function index()
{
    $chart_options = [
        'chart_title' => 'Users by months',
        'report_type' => 'group_by_date',
        'model' => 'App\Models\User',
        'group_by_field' => 'created_at',
        'group_by_period' => 'month',
        'chart_type' => 'bar',
        'filter_field' => 'created_at',
        'filter_days' => 30, // show only last 30 days
    ];

    $chart1 = new LaravelChart($chart_options);

    $chart_options = [
        'chart_title' => 'Users by names',
        'report_type' => 'group_by_string',
        'model' => 'App\Models\User',
        'group_by_field' => 'name',
        'chart_type' => 'pie',
        'filter_field' => 'created_at',
        'filter_period' => 'month', // show users only registered this month
    ];

    $chart2 = new LaravelChart($chart_options);

    $chart_options = [
        'chart_title' => 'Transactions by dates',
        'report_type' => 'group_by_date',
        'model' => 'App\Models\Transaction',
        'group_by_field' => 'transaction_date',
        'group_by_period' => 'day',
        'aggregate_function' => 'sum',
        'aggregate_field' => 'amount',
        'chart_type' => 'line',
    ];

    $chart3 = new LaravelChart($chart_options);

    return view('home', compact('chart1', 'chart2', 'chart3'));
}
```

**View**:

```
@extends('layouts.app')

@section('content')

                Dashboard

                    {{ $chart1->options['chart_title'] }}
                    {!! $chart1->renderHtml() !!}

                    {{ $chart2->options['chart_title'] }}
                    {!! $chart2->renderHtml() !!}

                    {{ $chart3->options['chart_title'] }}
                    {!! $chart3->renderHtml() !!}

@endsection

@section('javascript')
{!! $chart1->renderChartJsLibrary() !!}

{!! $chart1->renderJs() !!}
{!! $chart2->renderJs() !!}
{!! $chart3->renderJs() !!}
@endsection
```

[![Laravel Charts - Users by Months](https://camo.githubusercontent.com/3c9dc9037d7d383e99a5bc3cbf4692067c3145155a06d54ed12d25586e43a775/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33372e30392d504d2e706e67)](https://camo.githubusercontent.com/3c9dc9037d7d383e99a5bc3cbf4692067c3145155a06d54ed12d25586e43a775/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33372e30392d504d2e706e67)

[![Laravel Charts - Users by Names](https://camo.githubusercontent.com/e65f4e7f083df586229f60464b1523c7355e0001443207496263a960573f0411/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33362e35302d504d2e706e67)](https://camo.githubusercontent.com/e65f4e7f083df586229f60464b1523c7355e0001443207496263a960573f0411/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33362e35302d504d2e706e67)

[![Laravel Charts - Transactions by Dates](https://camo.githubusercontent.com/c40e9055f61507f6d06e6cf7287403060caba66c7d0645438d3731bb6418611a/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33372e32372d504d2e706e67)](https://camo.githubusercontent.com/c40e9055f61507f6d06e6cf7287403060caba66c7d0645438d3731bb6418611a/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031392f30322f53637265656e2d53686f742d323031392d30322d31382d61742d322e33372e32372d504d2e706e67)

---

Multiple Datasets
-----------------

[](#multiple-datasets)

This is a new feature from v0.1.27. You can provide multiple arrays of settings to the `LaravelChart` constructor, and they will be drawn on the same chart.

```
$settings1 = [
    'chart_title'           => 'Users',
    'chart_type'            => 'line',
    'report_type'           => 'group_by_date',
    'model'                 => 'App\Models\User',
    'group_by_field'        => 'created_at',
    'group_by_period'       => 'day',
    'aggregate_function'    => 'count',
    'filter_field'          => 'created_at',
    'filter_days'           => '30',
    'group_by_field_format' => 'Y-m-d H:i:s',
    'column_class'          => 'col-md-12',
    'entries_number'        => '5',
    'translation_key'       => 'user',
    'continuous_time'       => true,
];
$settings2 = [
    'chart_title'           => 'Projects',
    'chart_type'            => 'line',
    'report_type'           => 'group_by_date',
    'model'                 => 'App\Models\Project',
    // ... other values identical to $settings1
];

$chart1 = new LaravelChart($settings1, $settings2);
```

[![Multiple Datasets](https://camo.githubusercontent.com/de27a505e51d9f4c927c4ea4f1b3e1ac9cbd8198497998e9c070ea0785d81ac9/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032312f31302f53637265656e73686f742d323032312d31302d30382d61742d30372e33302e30342e706e67)](https://camo.githubusercontent.com/de27a505e51d9f4c927c4ea4f1b3e1ac9cbd8198497998e9c070ea0785d81ac9/68747470733a2f2f6c61726176656c6461696c792e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032312f31302f53637265656e73686f742d323032312d31302d30382d61742d30372e33302e30342e706e67)

---

License
-------

[](#license)

The MIT License (MIT). Please see [License File](license.md) for more information.

---

More from our LaravelDaily Team
-------------------------------

[](#more-from-our-laraveldaily-team)

- Enroll in our [Laravel Online Courses](https://laraveldaily.com/courses)
- Check out our adminpanel generator [QuickAdminPanel](https://quickadminpanel.com)
- Subscribe to our [YouTube channel Laravel Daily](https://www.youtube.com/channel/UCTuplgOBi6tJIlesIboymGA)

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance19

Infrequent updates — may be unmaintained

Popularity59

Moderate usage in the ecosystem

Community31

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 64.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~45 days

Recently: every ~135 days

Total

36

Last Release

1055d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8dfd7abe6d76f60f1fe0b5d24abd419f4945bd41766823f9134bb877bb3f5a34?d=identicon)[Laraveldaily](/maintainers/Laraveldaily)

---

Top Contributors

[![PovilasKorop](https://avatars.githubusercontent.com/u/1510147?v=4)](https://github.com/PovilasKorop "PovilasKorop (96 commits)")[![ITMobilityControl](https://avatars.githubusercontent.com/u/123570740?v=4)](https://github.com/ITMobilityControl "ITMobilityControl (7 commits)")[![krekas](https://avatars.githubusercontent.com/u/11015977?v=4)](https://github.com/krekas "krekas (6 commits)")[![NathanaelGT](https://avatars.githubusercontent.com/u/32760797?v=4)](https://github.com/NathanaelGT "NathanaelGT (5 commits)")[![tommiekn](https://avatars.githubusercontent.com/u/24386363?v=4)](https://github.com/tommiekn "tommiekn (5 commits)")[![mixartemev](https://avatars.githubusercontent.com/u/5181924?v=4)](https://github.com/mixartemev "mixartemev (4 commits)")[![neppoz](https://avatars.githubusercontent.com/u/1729945?v=4)](https://github.com/neppoz "neppoz (3 commits)")[![zeevx](https://avatars.githubusercontent.com/u/44035730?v=4)](https://github.com/zeevx "zeevx (3 commits)")[![Dezv](https://avatars.githubusercontent.com/u/57325176?v=4)](https://github.com/Dezv "Dezv (2 commits)")[![Jenga01](https://avatars.githubusercontent.com/u/35556844?v=4)](https://github.com/Jenga01 "Jenga01 (2 commits)")[![VinenzoSoftware](https://avatars.githubusercontent.com/u/97481470?v=4)](https://github.com/VinenzoSoftware "VinenzoSoftware (2 commits)")[![developers-desk](https://avatars.githubusercontent.com/u/32850588?v=4)](https://github.com/developers-desk "developers-desk (2 commits)")[![mitulkoradiya](https://avatars.githubusercontent.com/u/13043276?v=4)](https://github.com/mitulkoradiya "mitulkoradiya (1 commits)")[![DevinNorgarb](https://avatars.githubusercontent.com/u/12491966?v=4)](https://github.com/DevinNorgarb "DevinNorgarb (1 commits)")[![KarolisNarkevicius](https://avatars.githubusercontent.com/u/4035113?v=4)](https://github.com/KarolisNarkevicius "KarolisNarkevicius (1 commits)")[![kyaroslav](https://avatars.githubusercontent.com/u/389143?v=4)](https://github.com/kyaroslav "kyaroslav (1 commits)")[![lakuapik](https://avatars.githubusercontent.com/u/20186786?v=4)](https://github.com/lakuapik "lakuapik (1 commits)")[![LaravelDaily](https://avatars.githubusercontent.com/u/15341846?v=4)](https://github.com/LaravelDaily "LaravelDaily (1 commits)")[![arjvand](https://avatars.githubusercontent.com/u/6619045?v=4)](https://github.com/arjvand "arjvand (1 commits)")[![oluwajubelo](https://avatars.githubusercontent.com/u/24563061?v=4)](https://github.com/oluwajubelo "oluwajubelo (1 commits)")

### Embed Badge

![Health badge](/badges/laraveldaily-laravel-charts/health.svg)

```
[![Health](https://phpackages.com/badges/laraveldaily-laravel-charts/health.svg)](https://phpackages.com/packages/laraveldaily-laravel-charts)
```

###  Alternatives

[adamb/google-fonts

Get a list of Google Fonts and search by type or weight

121.5k](/packages/adamb-google-fonts)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
