Laravel5 implements the form of nested comments (detailed code explanation)
The content of this article is about the form of implementing nested comments in Laravel5 (detailed code explanation). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
We often see comments displayed in many forms, such as '@' so-and-so, or contracted comments like Zhihu, or nested comments, so at the beginning it is also The most common one is nested comments, because this is more eye-catching.
Preparation work
1. Design three tables: users, posts, comments, table The structure is as follows:
users
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); });
posts
Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->integer('user_id')->index(); $table->text('content'); $table->timestamps(); });
comments
Schema::create('comments', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->index(); $table->integer('post_id')->index(); $table->integer('parent_id')->index()->default(0); $table->text('body'); $table->timestamps(); });
2.Model layer:
Post.php file
/** * 一篇文章有多个评论 * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function comments() { return $this->hasMany(Comment::class); } /** * 获取这篇文章的评论以parent_id来分组 * @return static */ public function getComments() { return $this->comments()->with('owner')->get()->groupBy('parent_id'); }
Comments.php file
/** * 这个评论的所属用户 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function owner() { return $this->belongsTo(User::class, 'user_id'); } /** * 这个评论的子评论 * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function replies() { return $this->hasMany(Comment::class, 'parent_id'); }
Logic writing
The nested comments we want to implement actually already have some ideas in our preparation work. We first display an article. , and use the one-to-many relationship between articles and comments to display all comments. However, our comments involve a field called parent_id. This field is actually very special. We use this field to perform grouping. The code is the return above. $this->comments()->with('owner')->get()->groupBy('parent_id'), the specific process is as follows:
web.php file
\Auth::loginUsingId(1); //用户id为1的登录 //显示文章和相应的评论 Route::get('/post/show/{post}', function (\App\Post $post) { $post->load('comments.owner'); $comments = $post->getComments(); $comments['root'] = $comments['']; unset($comments['']); return view('posts.show', compact('post', 'comments')); }); //用户进行评论 Route::post('post/{post}/comments', function (\App\Post $post) { $post->comments()->create([ 'body' => request('body'), 'user_id' => \Auth::id(), 'parent_id' => request('parent_id', null), ]); return back(); });
View code
We need to implement nesting in terms of views, so as users comment more and more on each other, there will be more levels of nesting, so, We need to use various tricks to display the entire comment here. We use the @include() function to display it. Then the structure of our attempt is as follows:
- comments comments.blade.php form.blade.php list.blade.php - posts show.blade.php
The code is as follows:
show.blade.php
nbsp;html> <meta> <meta> <meta> <link> <div> <div> <h2 id="post-gt-title">{{$post->title}}</h2> <h4 id="post-gt-content">{{$post->content}}</h4> <hr> @include('comments.list',['collections'=>$comments['root']]) <h3 id="留下您的评论">留下您的评论</h3> @include('comments.form',['parentId'=>$post->id]) </div> </div>
comment.blade.php
<div> <h5> <span>{{$comment->owner->name}}</span>:</h5> <h5 id="comment-gt-body">{{$comment->body}}</h5> @include('comments.form',['parentId'=>$comment->id]) @if(isset($comments[$comment->id])) @include('comments.list',['collections'=>$comments[$comment->id]]) @endif <hr> </div>
form.blade.php
list.blade.php
@foreach($collections as $comment) @include('comments.comment',['comment'=>$comment]) @endforeach
The final rendering is as follows

The above is the detailed content of Laravel5 implements the form of nested comments (detailed code explanation). For more information, please follow other related articles on the PHP Chinese website!

ToenhanceengagementandcohesionamongdistributedteamsbeyondZoom,implementthesestrategies:1)Organizevirtualcoffeebreaksforinformalchats,2)UseasynchronoustoolslikeSlackfornon-workdiscussions,3)Introducegamificationwithteamgamesorchallenges,and4)Encourage

Laravel10introducesseveralbreakingchanges:1)ItrequiresPHP8.1orhigher,2)TheRouteServiceProvidernowusesabootmethodforloadingroutes,3)ThewithTimestamps()methodonEloquentrelationshipsisdeprecated,and4)TheRequestclassnowpreferstherules()methodforvalidatio

Tomaintainfocusandmotivationinremotework,createastructuredenvironment,managedigitaldistractions,fostermotivationthroughsocialinteractionsandgoalsetting,maintainwork-lifebalance,anduseappropriatetechnology.1)Setupadedicatedworkspaceandsticktoaroutine.

Tofostercollaborationandtrustinremoteteams,implementthesestrategies:1)Establishregular,structuredcommunicationwithpersonalcheck-ins,2)Usecollaborativetoolsfortransparency,3)Recognizeandcelebrateachievements,and4)Fosteracultureoftrustandadaptability.

Laravel's latest version of the main features include: 1. LaravelOctane improves application performance, 2. Improved model factory support relationships and state definitions, 3. Enhanced Artisan commands, 4. Improved error handling, 5. New Eloquent accessors and modifiers. These features significantly improve development efficiency and application performance, but need to be used with caution to avoid potential problems.

Tocombatisolationandlonelinessinremotework,companiesshouldimplementregular,meaningfulinteractions,provideequalgrowthopportunities,andusetechnologyeffectively.1)Fostergenuineconnectionsthroughvirtualcoffeebreaksandpersonalsharing.2)Ensureremoteworkers

Laravelispopularforfull-stackdevelopmentbecauseitoffersaseamlessblendofbackendpowerandfrontendflexibility.1)Itsbackendcapabilities,likeEloquentORM,simplifydatabaseinteractions.2)TheBladetemplatingengineallowsforclean,dynamicHTMLtemplates.3)LaravelMix

Key factors in choosing a video conferencing platform include user interface, security, and functionality. 1) The user interface should be intuitive, such as Zoom. 2) Security needs to be paid attention to, and Microsoft Teams provides end-to-end encryption. 3) Functions need to match requirements, GoogleMeet is suitable for short meetings, and CiscoWebex provides advanced collaboration tools.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Zend Studio 13.0.1
Powerful PHP integrated development environment

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

WebStorm Mac version
Useful JavaScript development tools
