laravel-commentable maintained by karabinse
Easily add a commentable trait to a Eloquent model
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.