Laravel需要获得每条评论的用户名

时间:2017-12-12 13:00:37

标签: php mysql laravel controller laravel-5.4

我获得评论者的问题是我在评论时保存用户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命令的几个版本,但不起作用。因为我不知道我在说什么评论者(我猜)。你知道我怎么做吗?

2 个答案:

答案 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)然后你将在每个评论对象中获得用户对象。