Der Inhalt dieses Artikels befasst sich mit der Implementierung verschachtelter Kommentare in Laravel5 (detaillierte Code-Erklärung). Ich hoffe, dass er für Sie hilfreich ist.
Wir sehen oft, dass Kommentare in vielen Formen angezeigt werden, wie zum Beispiel „@“ so und so, oder verkürzte Kommentare wie Zhihu oder verschachtelte Kommentare, daher ist das erste, was am häufigsten vorkommt, verschachtelt Kommentare, weil sie auffälliger sind.
Vorbereitungsarbeit
1 Entwerfen Sie drei Tabellen: Benutzer, Beiträge, Kommentare, Tabelle folgt:
Benutzer
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); });
Beiträge
Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->integer('user_id')->index(); $table->text('content'); $table->timestamps(); });
Kommentare
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. Modellebene:
Post.php-Datei
/** * 一篇文章有多个评论 * @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-Datei
/** * 这个评论的所属用户 * @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'); }
Logisches Schreiben
Die verschachtelten Kommentare, die wir implementieren möchten, haben tatsächlich einige Ideen in unserer Vorbereitungsarbeit und verwenden diese -zu-viele-Beziehung zwischen Artikeln und Kommentaren, aber unsere Kommentare beinhalten ein Feld namens parent_id. Dieses Feld verwenden wir zum Gruppieren, und der Code ist der obige Rückgabewert. comments()->with('owner')->get()->groupBy('parent_id'), der spezifische Prozess ist wie folgt:
web.php-Datei
\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(); });
Code anzeigen
Wir müssen die Verschachtelung in Bezug auf Ansichten implementieren, da Benutzer immer mehr gegenseitig Kommentare abgeben. Daher müssen wir verschiedene Tricks anwenden Zeigen Sie den gesamten Kommentar hier an. Wir verwenden die Funktion @include(), um ihn anzuzeigen. Dann ist die Struktur unseres Versuchs wie folgt:
- comments comments.blade.php form.blade.php list.blade.php - posts show.blade.php
Der Code lautet wie folgt:
show.blade.php
nbsp;html> <meta> <meta> <meta> <link> <div> <div> <h2>{{$post->title}}</h2> <h4>{{$post->content}}</h4> <hr> @include('comments.list',['collections'=>$comments['root']]) <h3>留下您的评论</h3> @include('comments.form',['parentId'=>$post->id]) </div> </div>
comment.blade.php
<div> <h5> <span>{{$comment->owner->name}}</span>:</h5> <h5>{{$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
Das endgültige Rendering ist wie folgt
Das obige ist der detaillierte Inhalt vonLaravel5 implementiert die Form verschachtelter Kommentare (detaillierte Codeerklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!