【问题标题】:Laravel eloquent -getting user info based on id, for each comment in a queryLaravel eloquent - 根据 id 获取用户信息,用于查询中的每条评论
【发布时间】:2016-09-29 03:19:23
【问题描述】:

我有一个 API 端点,我想在其中发送文章的所有相关数据。我有表userscommentsarticlesUsers 表有字段idfirst_namelast_name,表comments 有字段idarticle_iduser_id。关系定义如下:

文章型号:

public function comments()
  {
      return $this->hasMany('App\Comment');
  }

用户模型:

public function comments()
    {
        return $this->hasMany('App\Comment');
    }

评论模型:

public function user()
  {
      return $this->belongsTo('App\User');
  }

现在在我的函数中,我正在获取文章,然后创建一个包含有关 cmets 信息的数组。我应该为每条评论获取用户 first_namelast_name,但我不确定如何执行此操作,以及在从 eloquent 查询中获取集合时是否可以执行此操作?

这是函数:

$result = Article::where('publish', 1)->orderBy('created_at', 'desc')->paginate(15);

    foreach($result as $article){
      $articles[$article->id] = $article;
      $articles[$article->id]['comments'] = $article->comments()->get();
    }

    return $articles;

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    现在您已经定义了关系,像这样使用它:

    $article = Article::with('comments.user')->where('publish', '1')->orderBy('created_at', 'desc')->paginate(15);
    

    现在在你看来这样做:

    @foreach($article->comments as $comment)
         {{$comment->body}} by {{$comment->user->name}}
    @endforeach
    

    【讨论】:

    • 我忘了说这是一个API,所以我要发送json数据,我不能在视图中这样做。
    • 即使你将它作为 json 发送,你也会得到对象,一旦你的控制器中有第一行,即 $article = //这里的其余代码在控制器中返回 $article 并您将看到可以迭代的输出
    • 哦,是的,当然,我错过了 with('cmets.user') 的部分,太好了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2021-10-16
    • 2022-01-16
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多