Looking to hire Laravel developers? Try LaraJobs

laravel-commentable maintained by karabinse

Description
Easily add a commentable trait to a Eloquent model
Author
Last update
2025/11/06 15:00 (dev-main)
License
Downloads
3 496

Comments
comments powered by Disqus

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.