Laravel 显示 post 的最新评论
Laravel display latest comment of a post
我有 table 个话题,我想在索引页上显示该话题的最新评论。到目前为止,我已经 select 编辑了最新的评论并尝试在页面上显示它,但它只显示整体的最新评论,而不是特定 post[=19 的最新评论=]
所以我的 ThreadsController 现在看起来像这样,select查看所有评论并首先显示最新的评论。
public function index()
{
$threads = Thread::latest()->paginate(10);
$latestComment = Comment::latest()->first();
return view('threads.index', compact('threads', 'latestComment'));
}
线程模型
public function user()
{
return $this->belongsTo(User::class);
}
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
评论模型
public function user() {
return $this->belongsTo(User::class);
}
public function thread()
{
return $this->belongsTo(Thread::class);
}
public function commentable() {
return $this->morphTo();
}
那么如何select来自特定线程的最新评论并将其显示在索引中?
编辑:
控制器:
public function index()
{
$threads = Thread::latest()->with('comments')->paginate(10);
return view('threads.index', compact('threads'));
}
索引blade:
@foreach($threads as $thread)
{{ $thread->latestComment->user->name }}
@endforeach
评论table迁移
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->string('body');
$table->unsignedBigInteger('commentable_id');
$table->string('commentable_type');
$table->timestamps();
});
}
您可以创建胎面和评论之间的关系。
然后在 blade 你可以做这样的事情:
$thread->comments->latest()->first()
Comment::all()->orderBy('id', 'DESC')->get()
您已经正确定义了 Thread
和 Comment
之间的关系,但是您没有在 ThreadsController
的 index
函数中使用该关系.你只是抓住了最新的 10 Threads
和最近的 Comment
,而不是与你的 Thread
.
相关的评论
您想要的是获取所有 Threads
并将它们与最新的 Comment
一起传递到您的视图中。
您可以使用 eager loading
将您的 Comment
关系附加到您的模型。
Thread::latest()->with('comments')->paginate(10);
这将获取您最新的 10 个 Threads
以及他们的 Comments
。所以在你看来你可以做这样的事情:
@foreach ($threads as $thread)
{{ $thread->comments()->latest('id')->first()->comment }}
@endforeach
虽然这有效,但有点冗长。因此,您可以做的是将 comments
函数附加到 return 最近的 Comment
作为关系。
class Thread extends Model
{
use HasFactory;
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
public function latestComment()
{
return $this->morphOne(Comment::class, 'commentable')->latest('id');
}
}
这为您提供了访问 Thread
的最新 Comment
的更短方法。
所以回到你的场景;
在你的ThreadsController.php
public function index()
{
$threads = Thread::latest()->with('latestComment')->paginate(10);
return view('threads.index', compact('threads'));
}
然后在您的 index.blade.php
文件中
@foreach ($threads as $thread)
{{-- Access whatever properties you have on your comment --}}
{{ $thread->latestComment->id }}
@endforeach
我有 table 个话题,我想在索引页上显示该话题的最新评论。到目前为止,我已经 select 编辑了最新的评论并尝试在页面上显示它,但它只显示整体的最新评论,而不是特定 post[=19 的最新评论=]
所以我的 ThreadsController 现在看起来像这样,select查看所有评论并首先显示最新的评论。
public function index()
{
$threads = Thread::latest()->paginate(10);
$latestComment = Comment::latest()->first();
return view('threads.index', compact('threads', 'latestComment'));
}
线程模型
public function user()
{
return $this->belongsTo(User::class);
}
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
评论模型
public function user() {
return $this->belongsTo(User::class);
}
public function thread()
{
return $this->belongsTo(Thread::class);
}
public function commentable() {
return $this->morphTo();
}
那么如何select来自特定线程的最新评论并将其显示在索引中?
编辑:
控制器:
public function index()
{
$threads = Thread::latest()->with('comments')->paginate(10);
return view('threads.index', compact('threads'));
}
索引blade:
@foreach($threads as $thread)
{{ $thread->latestComment->user->name }}
@endforeach
评论table迁移
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->string('body');
$table->unsignedBigInteger('commentable_id');
$table->string('commentable_type');
$table->timestamps();
});
}
您可以创建胎面和评论之间的关系。 然后在 blade 你可以做这样的事情: $thread->comments->latest()->first()
Comment::all()->orderBy('id', 'DESC')->get()
您已经正确定义了 Thread
和 Comment
之间的关系,但是您没有在 ThreadsController
的 index
函数中使用该关系.你只是抓住了最新的 10 Threads
和最近的 Comment
,而不是与你的 Thread
.
您想要的是获取所有 Threads
并将它们与最新的 Comment
一起传递到您的视图中。
您可以使用 eager loading
将您的 Comment
关系附加到您的模型。
Thread::latest()->with('comments')->paginate(10);
这将获取您最新的 10 个 Threads
以及他们的 Comments
。所以在你看来你可以做这样的事情:
@foreach ($threads as $thread)
{{ $thread->comments()->latest('id')->first()->comment }}
@endforeach
虽然这有效,但有点冗长。因此,您可以做的是将 comments
函数附加到 return 最近的 Comment
作为关系。
class Thread extends Model
{
use HasFactory;
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
public function latestComment()
{
return $this->morphOne(Comment::class, 'commentable')->latest('id');
}
}
这为您提供了访问 Thread
的最新 Comment
的更短方法。
所以回到你的场景;
在你的ThreadsController.php
public function index()
{
$threads = Thread::latest()->with('latestComment')->paginate(10);
return view('threads.index', compact('threads'));
}
然后在您的 index.blade.php
文件中
@foreach ($threads as $thread)
{{-- Access whatever properties you have on your comment --}}
{{ $thread->latestComment->id }}
@endforeach