繁体   English   中英

Laravel需要获取每个评论的用户名

[英]Laravel need to get username of each comment

我获取评论者的问题是我在评论时保存了用户ID,并在帖子下方返回了所有评论,但是当我尝试返回用户名时,Laravel也给出了错误,我想是因为它没有知道应该为哪个用户标识从用户表返回用户名。 当前,用于评论的控制器如下:

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

我获得了$articleID进行路由以从数据库中查找文章内容,并在注释表中使用了它,还可以找到属于特定文章的注释。 但是当我尝试例如

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

它失败。 我尝试了几种版本的这种SQL命令,但是没有用。 因为它不知道我在说哪个评论员(我想)。 您是否知道我该怎么做?

您必须为此使用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)在您的评论模型中添加用户关系:

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

2)然后得到您的评论如下:

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

3)然后,您将在每个注释对象中获得用户对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM