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

问题描述 投票:2回答:2

我得到评论者的问题是我在评论时保存了用户ID,并且我在帖子下方返回了所有评论,但是当我尝试返回用户名时,Laravel给出了一个错误,我想这是因为它没有知道应该从users表返回用户名的用户ID。目前评论的控制器如下:

$comments = DB::select("Select * from comments where article_id = $articleID");

我得到$articleID通过orther的路线从数据库中找到文章内容,我在评论表中使用它以查找属于特定文章的评论。但是,当我试图举例说

$commenter = User::where('id', $comments->user_id)->first();

它失败。我尝试了这种类型的SQL命令的几个版本,但不起作用。因为它不知道我在说什么评论者(我猜)。你知道我怎么做吗?

php mysql laravel controller laravel-5.4
2个回答
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();

这样,您将拥有对本文发表评论的所有用户的列表。


2
投票

只是忘了所有这些东西,并按照以下步骤:

1)在您的评论中添加用户关系模型:

function user(){
    return $this->belongsTo('App\Models\User','user_id','id');
}

2)然后得到你的意见如下:

$comments = Comments::where('artical_id',$articleID)->with('user')->get();

3)然后你将在每个评论对象中获得用户对象。

© www.soinside.com 2019 - 2024. All rights reserved.