karabinse / laravel-commentable
Easily add a commentable trait to a Eloquent model
Fund package maintenance!
Karabin
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-data: ^4.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
README
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.