如何获取 $comments->post_id = $post->id with Laravel 的评论?
How to fetch comments where $comments->post_id = $post->id with Laravel?
好的,
所以我想不通这个。
Eloquent 模型对我来说是新的。
我正在尝试获取特定 post 的评论。
这是我的post模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function likes()
{
return $this->hasMany('App\Like');
}
public function comments()
{
return $this->hasMany('App\Comment');
}
}
评论型号:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function post()
{
return $this->belongsTo('App\Post');
}
}
路线:
public function getDashboard(){
$posts = Post::orderBy('created_at', 'desc')->get(); // MySQL ORDER BY
$comments = Comment::orderBy('created_at', 'desc')->get();
return view('dashboard', ['posts' => $posts], ['comments' => $comments]);
}
($comments 可能是不必要的?)
查看:
@foreach($posts as $post)
<article class="post" data-postid=" {{ $post->id }} ">
<p>{{ $post->body }}</p>
<div class="info">
Posted by {{$post->user->first_name}} on {{ $post->created_at }}
</div>
</article>
我尝试使用以下方式遍历评论:
@while($comments->post_id = $post->id)
<p>{{$comments->body}}</p>
@endwhile
我收到一条错误消息 "Undefined property: Illuminate\Database\Eloquent\Collection::$body",即使评论 table 有一个名为 "body" 的列。
@foreach($post->comments as $comment)
是你想要的。您也可以在查询中使用预先加载来加快速度:
Post::with('comments')->orderBy('created_at', 'desc')->get()
由于 $post->user->first_name
,您编写代码时创建了多个查询。例如,如果您有 70 个帖子,您的代码将创建 72 个非常糟糕的查询。
最好使用 eager loading 加载带有评论和用户的帖子。此代码将仅创建 3 个查询:
Post::orderBy('created_at', 'desc')
->with(['user', 'comments' => function ($q) {
$q->orderBy('created_at', 'desc');
}])->get();
然后对集合进行迭代:
@foreach ($posts as $post) {
<article class="post" data-postid=" {{ $post->id }} ">
....
@foreach ($post->comments as $comment) {
$comment->content;
}
}
好的,
所以我想不通这个。 Eloquent 模型对我来说是新的。
我正在尝试获取特定 post 的评论。
这是我的post模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function likes()
{
return $this->hasMany('App\Like');
}
public function comments()
{
return $this->hasMany('App\Comment');
}
}
评论型号:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function post()
{
return $this->belongsTo('App\Post');
}
}
路线:
public function getDashboard(){
$posts = Post::orderBy('created_at', 'desc')->get(); // MySQL ORDER BY
$comments = Comment::orderBy('created_at', 'desc')->get();
return view('dashboard', ['posts' => $posts], ['comments' => $comments]);
}
($comments 可能是不必要的?)
查看:
@foreach($posts as $post)
<article class="post" data-postid=" {{ $post->id }} ">
<p>{{ $post->body }}</p>
<div class="info">
Posted by {{$post->user->first_name}} on {{ $post->created_at }}
</div>
</article>
我尝试使用以下方式遍历评论:
@while($comments->post_id = $post->id)
<p>{{$comments->body}}</p>
@endwhile
我收到一条错误消息 "Undefined property: Illuminate\Database\Eloquent\Collection::$body",即使评论 table 有一个名为 "body" 的列。
@foreach($post->comments as $comment)
是你想要的。您也可以在查询中使用预先加载来加快速度:
Post::with('comments')->orderBy('created_at', 'desc')->get()
由于 $post->user->first_name
,您编写代码时创建了多个查询。例如,如果您有 70 个帖子,您的代码将创建 72 个非常糟糕的查询。
最好使用 eager loading 加载带有评论和用户的帖子。此代码将仅创建 3 个查询:
Post::orderBy('created_at', 'desc')
->with(['user', 'comments' => function ($q) {
$q->orderBy('created_at', 'desc');
}])->get();
然后对集合进行迭代:
@foreach ($posts as $post) {
<article class="post" data-postid=" {{ $post->id }} ">
....
@foreach ($post->comments as $comment) {
$comment->content;
}
}