karabinse/laravel-commentable

Easily add a commentable trait to a Eloquent model
4,068
Install
composer require karabinse/laravel-commentable
Latest Version:1.1.0
PHP:^8.2
Laravel:10 – 13
License:MIT
Last Updated:Jun 4, 2026
Links: GitHub  ·  Packagist
Maintainer: Albin N

Easily add a commentable trait to a Eloquent model

Latest Version on Packagist

Easily add a commentable trait to an Eloquent model


use Karabin\Commentable\Concerns\Commentable;

class Product extends Model
{
    use Commentable;

    protected $guarded = ['location'];

Installation

You can install the package via composer:

composer require karabinse/laravel-commentable

You can publish and run the migrations with:

php artisan vendor:publish --tag="laravel-commentable-migrations"
php artisan migrate

You can publish the config file with:

php artisan vendor:publish --tag="laravel-commentable-config"

This is the contents of the published config file:

return [
    'models' => [
        'comment' => \Karabin\Commentable\Models\Comment::class,
    ],

    // Add models that have comments here
    'model_map' => [
    ],

    'data' => [
        'comment' => \Karabin\Commentable\Data\CommentData::class,
    ],
];

Optionally, you can publish the views using

php artisan vendor:publish --tag="laravel-commentable-views"

Usage

Add the trait to the model you want to add comments to.

class Customer extends Model
{
    use Commentable, HasFactory;

Configure the model map. You can also provide a data transformer for the comment itself.


use App\Data\CommentData;
use App\Models\Customer;
use App\Models\Product;

return [
    'models' => [
        'comment' => \Karabin\Commentable\Models\Comment::class,
    ],

    // Add models that have comments here
    'model_map' => [
        'customers' => Customer::class,
        'products' => Product::class,
    ],

    'data' => [
        'comment' => CommentData::class,
    ],
];

Saving a new comment:

use Karabin\Commentable\Models\Comment;

$commentModel = new Comment;
$comment = $commentModel->storeComment(
    commenter: $request->user(),
    modelName: $modelName,
    modelId: $modelId,
    comment: $request->comment,
    parentId: $request->parent_id ?? null
);

return CommentData::from($comment)->wrap('data');

Getting comments:

$commentModel = new Comment;
$comments = $commentModel->getCommentsForModel($modelName, $modelId);

return response()->json(['data' => $comments]);

Testing

composer test

Credits

License

The MIT License (MIT). Please see License File for more information.

Related Packages

christianvizarra/laravel-commentable

Forked from DraperStudio - Commentable Polymorphic Eloquent Models for for Larav...

28 0
coliving/commentable

Commentable Polymorphic Eloquent Models for for Laravel. This is fork from artis...

37,189 2
alibayat/laravel-commentable

Implementing a Comment system for Laravel's Eloquent models.

11,255 18
karabinse/laravel-user-invitation

User invitation for Laravel using built in PasswordBroker

5,979 1

Version History

Version Released PHP Laravel License
1.1.0 ^8.2 ^10.0||^11.0||^12.0||^13.0 MIT
1.0.2 ^8.2 ^10.0||^11.0 MIT
1.0.1 ^8.2 ^10.0||^11.0 MIT
1.0.0 ^8.2 ^10.0||^11.0 MIT