我获得评论者的问题是我在评论时保存用户ID并且我在帖子下方返回所有评论,但是当我尝试返回用户名时,Laravel给出错误,我想这是因为它我不知道哪个用户ID应该从users表返回用户名。目前评论的控制器如下:
$comments = DB::select("Select * from comments where article_id = $articleID");
我从$articleID
获取路径以查找数据库中的文章内容,并在 comments 表中使用它以查找评论属于特定的 文章 。但是当我试图举例时
$commenter = User::where('id', $comments->user_id)->first();
失败了。我尝试了这种类型的SQL命令的几个版本,但不起作用。因为我不知道我在说什么评论者(我猜)。你知道我怎么做吗?
答案 0 :(得分:4)
你必须使用foreach。如果您需要为每个注释提供用户,您应该迭代注释以实现此目的。例如:
$comments = DB::select("Select * from comments where article_id = $articleID");
foreach ($comments as $comment) {
$commenter = User::where('id', $comment->user_id)->first();
}
如果您希望获得文章中包含评论的所有用户,您应该尝试搜索用户并使用已建立的关系。 主要想法是这样的。
在用户模型中,您必须设置与评论的关系:
public function comments()
{
$this->hasMany(Comment::class);
}
然后,您可以使用whereHas
来搜索这些关系:
$users = User::whereHas('comments', function ($q1) use ($articleId) {
$q1->where('article_id', $articleId);
})->get();
通过这种方式,您将获得对本文发表评论的所有用户的列表。
答案 1 :(得分:2)
忘记所有这些内容并按照以下步骤操作:
1)在您的评论模型中添加用户关系:
function user(){
return $this->belongsTo('App\Models\User','user_id','id');
}
2)然后得到如下评论:
$comments = Comments::where('artical_id',$articleID)->with('user')->get();
3)然后你将在每个评论对象中获得用户对象。