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 Comments Laravel Package

beyondcode/laravel-comments

Add nested, approvable comments to any Laravel Eloquent model. Use a simple HasComments trait, create comments as the current user or on behalf of another user, and manage approval via an is_approved flag with migrations and config publishing included.

View on GitHub
Deep Wiki
Context7

Add comments to your Laravel application

Latest Version on Packagist Total Downloads

Add the ability to associate comments to your Laravel Eloquent models. The comments can be approved and nested.

$post = Post::find(1);

$post->comment('This is a comment');

$post->commentAsUser($user, 'This is a comment from someone else');

Installation

You can install the package via composer:

composer require beyondcode/laravel-comments

The package will automatically register itself.

You can publish the migration with:

php artisan vendor:publish --provider="BeyondCode\Comments\CommentsServiceProvider" --tag="migrations"

After the migration has been published you can create the media-table by running the migrations:

php artisan migrate

You can publish the config-file with:

php artisan vendor:publish --provider="BeyondCode\Comments\CommentsServiceProvider" --tag="config"

Usage

Registering Models

To let your models be able to receive comments, add the HasComments trait to the model classes.

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use BeyondCode\Comments\Traits\HasComments;

class Post extends Model
{
    use HasComments;
    ...
}

Creating Comments

To create a comment on your commentable models, you can use the comment method. It receives the string of the comment that you want to store.

$post = Post::find(1);

$comment = $post->comment('This is a comment from a user.');

The comment method returns the newly created comment class.

Sometimes you also might want to create comments on behalf of other users. You can do this using the commentAsUser method and pass in your user model that should get associated with this comment:

$post = Post::find(1);

$comment = $post->commentAsUser($yourUser, 'This is a comment from someone else.');

Approving Comments

By default, all comments that you create are not approved - this is just a boolean flag called is_approved that you can use in your views/controllers to filter out comments that you might not yet want to display.

To approve a single comment, you may use the approve method on the Comment model like this:

$post = Post::find(1);
$comment = $post->comments->first();

$comment->approve();

Auto Approve Comments

If you want to automatically approve a comment for a specific user (and optionally model) you can let your User model implement the following interface and method:

namespace App\Models;

use BeyondCode\Comments\Contracts\Commentator;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements Commentator
{
    /**
     * Check if a comment for a specific model needs to be approved.
     * @param mixed $model
     * @return bool
     */
    public function needsCommentApproval($model): bool
    {
        return false;
    }

}

The needsCommentApproval method received the model instance that you want to add a comment to and you can either return true to mark the comment as not approved, or return false to mark the comment as approved.

Retrieving Comments

The models that use the HasComments trait have access to it's comments using the comments relation:


$post = Post::find(1);

// Retrieve all comments
$comments = $post->comments;

// Retrieve only approved comments
$approved = $post->comments()->approved()->get();

Nesting Comments

BeyondCode\Comments\Comment itself implements the HasComments trait, so you can comment on a comment and therefore nest them:

$comment = BeyondCode\Comments\Comment::first();
$comment->commentAsUser($user, "Hey there!");

Deleting Replies

When you delete a comment, you may optionally want to delete all its nested comments (replies). To optionally enable this feature, set the delete_replies_along_comments config property in the config/comments.php file to true.

Events

When a new comment is added the BeyondCode\Comments\Events\CommentAdded event will be dispatched. When a comment is deleted the BeyondCode\Comments\Events\CommentDeleted event will be dispatched.

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email marcel@beyondco.de instead of using the issue tracker.

Credits

License

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

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.
ilhamsyabani/laravel-volt-starter
thethunderturner/filament-latex
ghostcompiler/laravel-querybuilder
webrek/laravel-telescope-mongodb
anousss007/blatui
zatona-eg/zatona-eg-api
cocosmos/filament-sticky-save-bar
patrickbussmann/oauth2-apple
3brs/enterprise-security-bundle
anousss007/vigilance
supportpal/eloquent-model
ardenexal/fhir-models
laravel-at/laravel-image-sanitize
romalytar/yammi-audit-log-laravel
ardenexal/fhir-validation
arshaviras/weather-widget
laravel-chronicle/core
sunchayn/nimbus
daikazu/eloquent-salesforce-objects
unseen-codes/chat