jaktech / anaphora
Anaphora is a robust Laravel reporting package that simplifies the generation and retrieval of insightful reports. With Anaphora, effortlessly create, manage, and retrieve reports for your Laravel applications, providing a streamlined experience for tracking, analyzing, and visualizing essential dat
Requires
- php: ^7.2|~8.0.0|~8.1.0|~8.2.0
- illuminate/support: *
Requires (Dev)
- orchestra/testbench: ^8.15
- phpunit/phpunit: ^10.4
This package is auto-updated.
Last update: 2024-10-24 07:30:21 UTC
README
Introduction
This Laravel Eloquent extension provides record according to dates using models.
This package provides an event that will generate a unique slug when saving or creating any Eloquent model.
Installation
composer require jaktech/anaphora
Usage
Getting Started
Consider the following table schema for hierarchical data:
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); });
Use the Reportable
trait in your model to work with reports:
class User extends Model { use \Jakteck\Anaphora\Traits\Reportable; }
Scopes
The trait provides query scopes to filter data by datetime:
yearlyReport($year = null)
: provide year-wise record. By default it will provide current year record.thisYearReport()
: provide current year record.lastYearReport()
: provide previous year record.monthlyReport($month = null, $year = null)
: provide month-wise record. By default it will provide current month.thisMonthReport()
: provide current month record.lastMonthReport()
: provide last month record.thisWeekReport()
: provide this week record. (mon - sun)lastWeekReport()
: provide last week record. (mon - sun)dailyReport($date = null)
: provide date-wise record. By default it will provide today's record.todayReport()
: provide today record.yesterdayReport()
: provide yesterday record.hourlyReport($from = null, $to = null, $date = null)
: provide hour-wise record. By default it will provide records between last hour to current hour.
Yearly Report
/*Only Current Year Users*/ $users = User::yearlyReport()->get(); // or /*2018 Users*/ $year = 2018; // or Carbon date $users = User::yearlyReport($year)->get();
This Year Report
/*Only Current Year Users*/ $users = User::thisYearReport()->get();
Last Year Report
/*Only Last Year Users*/ $users = User::lastYearReport()->get();
Monthly Report
/*Only Current Month Users*/ $users = User::monthlyReport()->get(); // or /*November Current Year Users*/ $month = 11; // or Carbon date $users = User::monthlyReport($month)->get(); // or /*November 2018 Year Users*/ $month = 11; // or Carbon date $year = 2018; // or Carbon date $users = User::monthlyReport($month, $year)->get();
This Month Report
/*Only Current Month Users*/ $users = User::thisMonthReport()->get();
Last Month Report
/*Only Last Month Users*/ $users = User::thisMonthReport()->get();
This Week Report
/*Only Current Week Users (Mon - Sun)*/ $users = User::thisWeekReport()->get();
Last Week Report
/*Only Last Week Users (Mon - Sun)*/ $users = User::lastWeekReport()->get();
Daily Report
/*Only Today's Users*/ $users = User::dailyReport()->get(); // or /*December 27, 2019 Users*/ $date = '2019-12-27'; // or Carbon date $users = User::dailyReport($date)->get();
Today Report
/*Only Today's Users*/ $users = User::todayReport()->get();
Yesterday Report
/*Only Yesterday's Users*/ $users = User::yesterdayReport()->get();
Hourly Report
/*Only Last hour to current hour's Users*/ $users = User::hourlyReport()->get(); // or /*Only 7 am to 2pm Users*/ $from = '07:00'; // or Carbon time $to = '14:00'; // or Carbon time $users = User::hourlyReport($from, $to)->get(); // or /*Only 7 am to 2pm at December 27, 2019 Users*/ $from = '07:00'; // or Carbon time $to = '14:00'; // or Carbon time $date = '2019-12-27'; // or Carbon date $users = User::hourlyReport($from, $to, $date)->get();
Custom Query
You can implement your own conditions or do whatever you want with query.
$users = User::dailyReport()->where('status', '=', 'inactive')->get();
Advanced Usage
$data = []; $date = Carbon::now()->firstOfMonth(); while ($date <= Carbon::now()->endOfMonth()) { $users = User::dailyReport($date) ->when('condition', function ($query) { $query->where('column', 'value'); }) ->whereNotIn('column', ['value1', 'value2']) ->where('column', 'operator', 'value') ->get(); $data[] = $users; $date = $date->copy()->addDay(); }
License
This is open-sourced laravel library licensed under the MIT license.