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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel需要获得每条评论的用户名相关的知识,希望对你有一定的参考价值。

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

答案

你必须使用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('AppModelsUser','user_id','id');
}

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

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

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

以上是关于Laravel需要获得每条评论的用户名的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中获取用户名和带有文章 id 的评论

按他们获得的点数排序评论,Laravel 5.2 多态关系

Laravel 5.1,向用户返回响应,然后执行一些代码 [关闭]

PHP 基于laravel框架获取微博数据之二 用户数据的使用

Laravel Eloquent - 相当于第一个()?

PHP 基于laravel框架获取微博数据之二 用户数据的使用