Laravel Eloquent渴望加载不起作用

时间:2016-06-19 05:44:15

标签: laravel eloquent eager-loading

在我的博客应用程序中,用户可以在那里发布文章和评论。当我转到任何用户个人资料http://eloquent-laravel.app/user/Name时,我想热切地加载该特定用户的所有文章和评论。这是我的代码,但并没有急切地加载所有文章和评论。

$user = \App\User::with(['articles', 'comments'])->where('name', $name)->first(); 
return view('articles.user', compact('user'));

用户模型的代码

public function articles() 
{
    return $this->hasMany(Article::class);
}

public function comments() 
{
    return $this->hasManyThrough(Comment::class, Article::class, 'user_id', 'article_id');
}

我如何热切地加载这些文章和评论? 但是,如果我删除where子句,那么渴望加载正在运行。但我确实需要让某个用户热切地加载所有文章和评论。 感谢

2 个答案:

答案 0 :(得分:2)

Okk试试这个..在你的文章模型添加

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

现在从您的控制器或存储库添加

 $user = \App\User::with(['articles.comments' => function ($query)use($userId) {
        $query->where('user_id',$userId);
}])->where('name', $name)->get(); 

在这里,您将获得特定用户的所有文章以及他的评论

在另一种情况下(就像你想要用户的所有评论和帖子一样)你可以这样做: 在用户模型中添加它

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

然后尝试

$user = \App\User::where('name', $name)->with(['articles', 'comments'])->get();

答案 1 :(得分:0)

试试这个:

$user = \App\User::where('name', $name)->with(['articles', 'comments'])->first();