Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Reports Laravel Package

rezaghz/laravel-reports

Add reporting to Eloquent models (spam, violence, abuse, drugs, etc.). Mark a User as reporter and any model as reportable via traits/contracts. Simple API to report, remove, or toggle reports, with publishable migrations. Supports Laravel 6–12, PHP 8.2+.

View on GitHub
Deep Wiki
Context7

Laravel Reports

laravel-reports

Laravel reports package for implementing reports (eg: Spam,Violence,Child Abuse,illegal Drugs, etc.) on Eloquent models.

Requirements

  • PHP 8.2 or higher
  • Laravel 6.x, 7.x, 8.x, 9.x, 10.x, 11.x, or 12.x

Installation

Download package into the project using Composer.

$ composer require rezaghz/laravel-reports

Registering package

Laravel 5.5 (or higher) uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.

For Laravel 5.4 or earlier releases version include the service provider within app/config/app.php:

'providers' => [
    Rezaghz\Laravel\Reports\ReportsServiceProvider::class,
],

Database Migration

If you want to make changes in migrations, publish them to your application first.

$ php artisan vendor:publish --provider="Rezaghz\Laravel\Reports\ReportsServiceProvider" --tag=laravel-reports-migrations

Run database migrations.

$ php artisan migrate

Usage

Prepare Reports (User) Model

Use Rezaghz\Laravel\Reports\Contracts\ReportsInterface contract in model which will perform report behavior on reportable model and implement it and use Rezaghz\Laravel\Reports\Traits\Reports trait.

use Rezaghz\Laravel\Reports\Traits\Reports;
use Rezaghz\Laravel\Reports\Contracts\ReportsInterface;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements ReportsInterface
{
    use Reports;
}

Prepare Reportable Model

Use Rezaghz\Laravel\Reports\Contracts\ReportableInterface contract in model which will get report behavior and implement it and use Rezaghz\Laravel\Reports\Traits\Reportable trait.

use Illuminate\Database\Eloquent\Model;
use Rezaghz\Laravel\Reports\Traits\Reportable;
use Rezaghz\Laravel\Reports\Contracts\ReportableInterface;

class Article extends Model implements ReportableInterface
{
    use Reportable;
}

Available Methods

Report

$user->reportTo($article, 'spam');

$article->report('spam'); // current login user
$article->report('spam', $user);

Remove Report

Removing report of user from reportable model.

$user->removeReportFrom($article);

$article->removeReport(); // current login user
$article->removeReport($user);

Toggle Report

The toggle report method will add a report to the model if the user has not reported. If a user has already reported, then it will replace the previous report with a new report. For example, if the user has reported 'spam' on the model. Now on toggles report to 'violence' then it will remove the 'spam' and stores the 'violence' report.

If a user has reported spam then on toggle report with spam. It will remove the report.

$user->toggleReportOn($article, 'spam');

$article->toggleReport('spam'); // current login user
$article->toggleReport('spam', $user);

Boolean check if user reported on model

$user->isReportedOn($article));

$article->is_reported; // current login user
$article->isReportBy(); // current login user
$article->isReportBy($user);

Report summary on model

$article->reportSummary();
$article->report_summary;

// example
$article->report_summary->toArray();
// output
/*
[
    "spam" => 5,
    "violence" => 2,
    "illegal_drugs" => 4,
    "child_abuse" => 1
]
*/

Get collection of users who reported on model

$article->reportsBy();

Scopes

Find all articles reported by user.

Article::whereReportedBy()->get(); // current login user

Article::whereReportedBy($user)->get();
Article::whereReportedBy($user->id)->get();

Report on Model

// It will return the Report object that is reported by given user.
$article->reported($user);
$article->reported(); // current login user
$article->reported; // current login user

$user->reportedOn($article);

Events

On each report added \Rezaghz\Laravel\Reports\Events\OnReport event is fired.

On each report removed \Rezaghz\Laravel\Reports\Events\OnDeleteReport event is fired.

Testing

Run the tests with:

$ composer test

Or run PHPUnit directly:

$ vendor/bin/phpunit

Changelog

v2.0.0 (2025-01-08)

  • BREAKING: Updated to support Laravel 12.x
  • BREAKING: Requires PHP 8.2 or higher
  • Updated migration to use modern Laravel 12 patterns
  • Fixed method naming inconsistencies
  • Improved type hints and return types
  • Updated testing framework compatibility

v1.0.0 (2023-09-28)

  • Initial release
  • Support for Laravel 6.x - 10.x
  • Basic reporting functionality
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky