在我的博客应用程序中,用户可以在那里发布文章和评论。当我转到任何用户个人资料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子句,那么渴望加载正在运行。但我确实需要让某个用户热切地加载所有文章和评论。 感谢
答案 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();