在Laravel中获取文章ID的用户名和评论

时间:2017-10-17 05:31:38

标签: laravel laravel-5 eloquent eager-loading

我有3个表用户,评论和文章。我有这样的路线:

Route::get('/article/{id}', 'ArticlesController@view');

我想要的是当我访问该路线时,我会在本文中获得用户名及其评论。

所以这里是我在ArticlesController中的视图功能:

public function view($id){
        $article = Article::with('comments')->find($id);
        return view('front.single',compact('article'));
}

这是我的single.blade.php代码:

<div class="single-grid">
      @section('content')
         <h1>{{ $article->title }}</h1>
         <p>{{ $article->content }}</p>
      @show
</div>          

<div class="comment-list">
@foreach($article->comments as $comment)
    <ul class="comment-list">
    <div class="comment-grid">
        <img src="/images/avatar.png" alt=""/>
        <div class="comment-info">
            <h4>{{ $comment->user->name }}</h4>
            <p>{{ $comment->comment }}</p>
            <h5>{{ $comment->created_at->diffForHumans() }}</h5>
            <a href="#">Reply</a>
        </div>
        <div class="clearfix"></div>
    </div>
</ul>
@endforeach
</div>

我不确定怎么做,因为它给我这样的错误:

"Call to undefined relationship [comment] on model [App\User]."

我已经在每个模型中定义了关系。这是我的文章模型:

public function comments(){
    return $this->hasMany(Comment::class);
}

public function user(){
    return $this->belongsTo(User::class);
}

我的评论模型:

 public function article(){
    $this->belongsTo(Article::class);
}
public function user(){
    $this->belongsTo(User::class);
}

这是我的用户模型:

public function articles(){
    return $this->hasMany(Article::class);
}
public function comments()
{
    return $this->hasMany(Comment::class);
}
public function publish(Article $article){
    $this->articles()->save($article);
}

这是我的表格结构: - 的用户(ID,姓名,电子邮件,密码,remember_token,created_at,的updated_at) - 的评论(ID,USER_ID,article_id的,评论,created_at,的updated_at) - 的制品(ID,USER_ID,标题,内容,created_at,的updated_at)

那么我怎么能通过这条路线使用用户名呢?感谢。

2 个答案:

答案 0 :(得分:3)

在您的评论模型上,您需要将文章替换为文章

public function article(){
        $this->belongsTo(Article::class);
    }

另外,如果您想获得用户特定的注释,则需要从

更改控制器操作代码
$article = Article::with('user.comment')->find($id) to
$article = Article::with('user.comments')->find($id); 

答案 1 :(得分:0)

我认为您的问题来自于使用 compact 函数:数组传递给视图而不是对象。
你能这样试试吗:

// Controller
public function view($id) {
    $article = Article::findOrFail($id);
    return view('front.single', $article);
}

<!-- View -->
@foreach($article->comments as $comment)
    {{ $comment->user->name }}
    {{ $comment->comment }}
    {{ $comment->created_at->diffForHumans() }}
@endforeach