@edmond_brakus
To limit the depth of reply comments in Laravel, you can add a depth column to your comments table and set a maximum depth for replies. Here are the steps to limit the depth of reply comments in Laravel:
- Add a migration to add a depth column to your comments table:
1
|
php artisan make:migration add_depth_to_comments_table
|
In the generated migration file, add the following code to add a depth column to your comments table:
1
2
3
|
Schema::table('comments', function (Blueprint $table) {
$table->integer('depth')->default(0);
});
|
Run the migration to add the depth column to your comments table:
- Update your comment model to include the depth column:
In your comment model (e.g., Comment.php), add the following code to define the depth column as fillable:
1
|
protected $fillable = ['content', 'user_id', 'parent_id', 'depth'];
|
- Add validation rules to limit the depth of reply comments:
In your controller method where you store a new comment, add validation rules to limit the depth of reply comments. For example, you can set a maximum depth of 2 for reply comments:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$validatedData = $request->validate([
'content' => 'required',
'user_id' => 'required',
'parent_id' => [
'required',
function($attribute, $value, $fail) {
$parentComment = Comment::find($value);
if ($parentComment && $parentComment->depth >= 2) {
return $fail("Reply depth exceeds maximum limit of 2.");
}
}
]
]);
|
- Update your comment creation logic to increment the depth of replies:
When creating a new comment, you need to increment the depth of the reply comment based on the parent comment's depth. For example, in your store method:
1
2
3
4
5
6
7
8
9
10
11
|
$comment = new Comment();
$comment->content = $request->content;
$comment->user_id = $request->user_id;
$comment->parent_id = $request->parent_id;
if ($request->parent_id) {
$parentComment = Comment::find($request->parent_id);
$comment->depth = $parentComment->depth + 1;
} else {
$comment->depth = 0;
}
$comment->save();
|
By following these steps, you can limit the depth of reply comments in Laravel by adding a depth column, setting validation rules, and updating your comment creation logic to handle the depth of reply comments.